def download(self): """ Download tile :return: Nothing """ grab = None rx = range(self._tiles_rectangle.width()) ry = range(self._tiles_rectangle.height()) for x, y in product(rx, ry): tp = Point(self._tiles_rectangle.topLeft() + QPoint(x, y)) if tp not in self._tile_pixmaps: grab = QPoint(tp) break if grab is None: self._url = QUrl() return path = 'http://tile.openstreetmap.org/%d/%d/%d.png' % ( self.zoom, grab.x(), grab.y()) self._url = QUrl(path) self.request = QNetworkRequest() self.request.setUrl(self._url) self.request.setRawHeader(b'User-Agent', b'Nokia (PyQt) Graphics Dojo 1.0') self.request.setAttribute(QNetworkRequest.User, grab) self._manager.get(self.request) print('downloading z:', self.zoom, 'x:', grab.x(), 'y:', grab.y())
def __init__(self, *args, **kargs): super().__init__(*args, **kargs) # lazy creation of the NetworkManager global _manager if _manager is None: _manager = QNetworkAccessManager() # open the destination file for writing if self.dest and self.dest != '::mem::': try: self._dest_fp = open(self.dest, 'wb') except OSError: self._notify_done(False) return else: self._dest_fp = None # build and send the GET request request = QNetworkRequest(self.url) if self._headers is not None: for key in self._headers: request.setHeader(key, self._headers[key]) self._reply = _manager.get(request) self._reply.finished.connect(self._finished_cb) self._reply.downloadProgress.connect(self._progress_cb) if self.dest != '::mem::': self._reply.readyRead.connect(self._data_ready_cb)
def CreateRequest(search_string, batch_size, page): # url = "http://doi.org/" + search_string url = "https://api.crossref.org/works/" + search_string + "/transform/application/x-bibtex" request = QNetworkRequest(QUrl(url)) request.setRawHeader(b"Accept", b"application/x-bibtex") return request
def __init__(self, parent=None): """ :param parent: """ super(SlippyMap, self).__init__(parent) self._offset = QPoint() self._tiles_rectangle = QRect() self._tile_pixmaps = {} # Point(x, y) to QPixmap mapping self._manager = QNetworkAccessManager() self._url = QUrl() # public vars self.width = 400 self.height = 300 self.zoom = 4 self.latitude = 59.9138204 self.longitude = 10.7387413 self._emptyTile = QPixmap(TDIM, TDIM) self._emptyTile.fill(Qt.lightGray) self.request = QNetworkRequest() self.cache = QNetworkDiskCache() self.cache.setCacheDirectory( QStandardPaths.writableLocation(QStandardPaths.CacheLocation)) self._manager.setCache(self.cache) self._manager.finished.connect(self.handle_network_data)
def build_request(self, query_items): query = QUrlQuery() for k, v in query_items.items(): query.addQueryItem(k, v) url = QUrl(self.base_url) url.setQuery(query) request = QNetworkRequest(self.base_request) request.setUrl(url) return request
def save_rank_server(self, source_df): """ 保存日持仓排名到服务器 """ self.parser_finished.emit("开始保存上期所{}日持仓排名数据到服务器数据库...".format(self.date.strftime("%Y-%m-%d")), False) data_body = source_df.to_dict(orient="records") app = QApplication.instance() network_manager = getattr(app, "_network") url = SERVER + "exchange/shfe/rank/?date=" + self.date.strftime("%Y-%m-%d") request = QNetworkRequest(url=url) request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json;charset=utf-8") reply = network_manager.post(request, json.dumps(data_body).encode("utf-8")) reply.finished.connect(self.save_rank_server_reply)
def ask_login_status(self): app_setting_file = os.path.join(BASE_DIR, "classini/app.ini") app_settings = QSettings(app_setting_file, QSettings.IniFormat) token = "Bearer " + app_settings.value("TOKEN/token") print(token) app = QApplication.instance() network_manager = getattr(app, "_network") url = SERVER + "token_login/" request = QNetworkRequest(QUrl(url)) request.setRawHeader("Authorization".encode("utf-8"), token.encode("utf-8")) reply = network_manager.get(request) reply.finished.connect(self.is_logged_reply)
def get_rank_source_file(self): """ 获取日排名数据 """ if self.date is None: raise DateValueError("请先使用`set_date`设置`SHFESpider`日期.") url = "http://www.shfe.com.cn/data/dailydata/kx/pm{}.dat".format(self.date.strftime('%Y%m%d')) app = QApplication.instance() network_manager = getattr(app, "_network") request = QNetworkRequest(url=url) request.setHeader(QNetworkRequest.UserAgentHeader, random.choice(USER_AGENTS)) reply = network_manager.get(request) reply.finished.connect(self.rank_source_file_reply)
def commit_spot_data(self): """ 提交数据 """ self.tip_label.setText("正在上传数据到服务器...") app = QApplication.instance() network_manager = getattr(app, "_network") url = SERVER + "spot/price/?date=" + self.today_str request = QNetworkRequest(QUrl(url)) request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json;charset=utf-8") reply = network_manager.post( request, json.dumps(self.final_data).encode("utf-8")) reply.finished.connect(self.save_spot_price_reply)
def get_rank_source_file(self): """ 获取日持仓排名数据源文件保存至本地 """ if self.date is None: raise DateValueError("请先使用`set_date`设置`CZCESpider`日期.") url = "http://www.czce.com.cn/cn/DFSStaticFiles/Future/{}/{}/FutureDataHolding.xls".format( self.date.year, self.date.strftime('%Y%m%d')) app = QApplication.instance() network_manager = getattr(app, "_network") request = QNetworkRequest(url=url) request.setHeader(QNetworkRequest.UserAgentHeader, random.choice(USER_AGENTS)) reply = network_manager.get(request) reply.finished.connect(self.rank_source_file_reply)
def get_daily_source_file(self): """ 获取每日行情数据源文件保存至本地 """ if self.date is None: raise DateValueError("请先使用`set_date`设置`CZCESpider`日期.") url = "http://www.cffex.com.cn/sj/hqsj/rtj/{}/{}/{}_1.csv".format( self.date.strftime('%Y%m'), self.date.strftime('%d'), self.date.strftime('%Y%m%d')) app = QApplication.instance() network_manager = getattr(app, "_network") request = QNetworkRequest(url=url) request.setHeader(QNetworkRequest.UserAgentHeader, random.choice(USER_AGENTS)) reply = network_manager.get(request) reply.finished.connect(self.daily_source_file_reply)
def CreateRequest(search_string, batch_size, page): url = ("https://export.arxiv.org/api/query?" + "id_list=" + urllib.parse.quote(search_string) + "&start=" + str( (page - 1) * batch_size) + "&max_results=" + str(batch_size)) request = QNetworkRequest(QUrl(url)) return request
def commit_new_variety(self): """ 确认提交新品种信息 """ belong_group = self.opts_widget.belong_group.currentText() belong_exchange = self.opts_widget.belong_exchange.currentText() variety_name = self.opts_widget.zh_name.text().strip() variety_en = self.opts_widget.en_name.text().strip() if not re.match(r'^[A-Z]{1,2}$', variety_en): QMessageBox.information(self, "错误", "交易代码为1~2个A-Z大写英文字母组成!") return new_variety = { "variety_name": variety_name, "variety_en": variety_en, "exchange_lib": belong_exchange, "group_name": belong_group } app = QApplication.instance() network_manager = getattr(app, "_network") url = SERVER + 'variety/' request = QNetworkRequest(QUrl(url)) reply = network_manager.post(request, json.dumps(new_variety).encode('utf-8')) reply.finished.connect(self.commit_variety_reply)
def query_contract_basis(self): """ 获取合约的基差数据 """ self.chart_data_table.clearContents() # 清空表格数据内容 self.chart_data_table.setRowCount(0) # 行数清空 app = QApplication.instance() network_manager = getattr(app, "_network") contract = self.contract_combobox.currentText() query_month = self.query_month_combobox.currentData() if not contract: self.tip_label.setText("选择对应品种和合约后查询数据. ") return self.tips_animation_timer.start(400) # 开启文字提示 self.chart_view.setUpdatesEnabled(False) if contract == "主力合约": self.basis_chart_title = self.current_variety + "主力合约基差" url = SERVER + "trend/contract-basis/{}/{}/main-contract/?query_month={}".format( self.current_exchange, self.current_variety, query_month) else: self.basis_chart_title = self.contract_combobox.currentText( ) + "基差" url = SERVER + "trend/contract-basis/{}/{}/?query_month={}".format( self.current_exchange, contract, query_month) reply = network_manager.get(QNetworkRequest(QUrl(url))) reply.finished.connect(self.basis_data_reply)
def __init__( self, index: int, request: QtNetwork.QNetworkRequest, track_progress: bool ): self.index = index self.request = request self.original_url = request.url() self.track_progress = track_progress
def prepareRequest(self): request = QNetworkRequest() request.setUrl(self.urlServer) request.setRawHeader(QByteArray(b"content-type"), QByteArray(b"application/json")) request.setRawHeader(QByteArray(b"charset"), QByteArray(b"utf-8")) if self.mpid != "open@": tokenStr = self.usuario + ":" + str(int( self.token[0])) + ":" + str( self.token[1]) if self.token != [] else "" tokenByte = QByteArray(tokenStr.encode()) tokenByteComplete = QByteArray(b"Session ") + tokenByte.toBase64() request.setRawHeader(QByteArray(b"authorization"), tokenByteComplete) return request
def user_commit_login(self): """ 用户提交登录 """ self.login_button.clicked.disconnect() # 关闭登录点击链接 # 改变登录按钮文字显示状态 self.text_animation_timer.start(800) md5_hash = md5() md5_hash.update(self.login_password.text().encode("utf-8")) app = QApplication.instance() network_manager = getattr(app, "_network") text_dict = { "phone": self.login_phone.text(), "password": md5_hash.hexdigest(), "input_code": self.login_code.text(), "code_uuid": self._code_uuid } multi_data = generate_multipart_data(text_dict) url = SERVER + "login/" request = QNetworkRequest(url=QUrl(url)) # request.setHeader(QNetworkRequest.ContentTypeHeader, "multipart/form-data; boundary=%s" % multi_data.boundary()) # 设置后服务器无法找到边界报400 reply = network_manager.post(request, multi_data) reply.finished.connect(self.user_login_back) multi_data.setParent(reply)
def user_commit_register(self): """ 用户提交注册 """ if self.register_password_1.text() != self.register_password_2.text(): QMessageBox.information(self, "错误", "两次输入密码不一致!") return self.register_button.clicked.disconnect() # 关闭注册点击链接 self.text_animation_timer.start(500) # 按钮文字显示状态 md5_hash = md5() md5_hash.update(self.register_password_1.text().encode("utf-8")) register_dict = { "phone": self.register_phone.text(), "nickname": self.register_nickname.text(), "password": md5_hash.hexdigest(), "input_code": self.register_code.text(), "code_uuid": self._code_uuid } print(register_dict) multi_data = generate_multipart_data(register_dict) app = QApplication.instance() network_manager = getattr(app, "_network") url = SERVER + "register/" request = QNetworkRequest(url=QUrl(url)) # request.setHeader(QNetworkRequest.ContentTypeHeader, "multipart/form-data; boundary=%s" % multi_data.boundary()) # 设置后服务器无法找到边界报400 reply = network_manager.post(request, multi_data) reply.finished.connect(self.user_register_back) multi_data.setParent(reply)
def CreateRequest(search_string, batch_size, page): url = ("https://export.arxiv.org/api/query?" + "search_query=" + urllib.parse.quote(search_string) + "&start=" + str( (page - 1) * batch_size) + "&max_results=" + str(batch_size) + "&sortBy=submittedDate&sortOrder=descending") request = QNetworkRequest(QUrl(url)) return request
def __init__(self, main_controller: "MainController", camera_description: CamDesc, mdi_area: QtWidgets.QMdiArea): self.main_controller = main_controller self.camera_description = camera_description self.address_str = camera_description.host.toString() self.sub_window = sub_window = MdiSubWindowCloser() sub_window.setWindowTitle(self.address_str) sub_window.setAttribute(Qt.WA_DeleteOnClose) sub_window.closed.connect(self.window_closed) camera_control = CameraControl(parent=sub_window) self.status = camera_control.status for cmd in ZOOM_COMMANDS: control = getattr(camera_control, cmd) cmd_name = cmd.replace("_", "-") control.pressed.connect( partial(self.zoom_command_pressed, cmd_name)) control.released.connect(self.zoom_command_released) sub_window.setWidget(camera_control) mdi_area.addSubWindow(sub_window) sub_window.show() self.base_url = QUrl(f"http://{self.address_str}/cam.cgi") self.base_request = QNetworkRequest() self.base_request.setRawHeader(QByteArray(b"Connection"), QByteArray(b"Keep-Alive")) self.base_request.setRawHeader(QByteArray(b"User-Agent"), QByteArray(b"Apache-HttpClient")) self.status_query_request = self.build_request({"mode": "getstate"}) self.stop_zoom_request = self.build_request({ "mode": "camcmd", "value": "zoomstop" }) self.ping_timer = QTimer(self.sub_window) self.ping_timer.timeout.connect(self.request_device_state) self.initial_requests = Queue() self.build_initial_request_list() request = self.get_next_request() self.query(request)
def get_net_position(self): """ 获取净持仓数据 """ self.tips_animation_timer.start(400) app = QApplication.instance() net_work = getattr(app, '_network') url = SERVER + "position/all-variety/?interval_days=" + str( self.interval_days.value()) reply = net_work.get(QNetworkRequest(QUrl(url))) reply.finished.connect(self.all_variety_position_reply)
def get_rank_source_file(self): """ 获取日排名数据源文件 """ base_url = "http://www.cffex.com.cn/sj/ccpm/{}/{}/{}_1.csv" app = QApplication.instance() network_manager = getattr(app, "_network") for variety in VARIETY_LIST: url = base_url.format(self.date.strftime("%Y%m"), self.date.strftime("%d"), variety) self.spider_finished.emit("准备获取{}的日排名数据文件...".format(variety), False) request = QNetworkRequest(url=url) request.setHeader(QNetworkRequest.UserAgentHeader, random.choice(USER_AGENTS)) reply = network_manager.get(request) reply.finished.connect(self.rank_source_file_reply) time.sleep(1) self.event_loop.exec_()
def get_image_code(self): app = QApplication.instance() network_manager = getattr(app, "_network") self._code_uuid = ''.join(str(uuid.uuid4()).split("-")) # 保存code_uuid方便登录使用 url = SERVER + 'image_code/?code_uuid=' + self._code_uuid request = QNetworkRequest(url=QUrl(url)) reply = network_manager.get(request) reply.finished.connect(self.image_code_back)
def query_spot_data(self): """ 查询指定日期现货数据用于修改 """ query_date = self.modify_date_edit.text() query_date_str = datetime.strptime(query_date, "%Y-%m-%d").strftime("%Y%m%d") app = QApplication.instance() network_manager = getattr(app, "_network") url = SERVER + "spot/price/?date=" + query_date_str reply = network_manager.get(QNetworkRequest(QUrl(url))) reply.finished.connect(self.query_spot_price_reply)
def click_variety(self, variety_en, exchange_lib): """ 左侧选择品种 """ self.current_variety = variety_en # 赋值类属性 self.current_exchange = exchange_lib self.contract_combobox.clear() # 清空合约下拉选项,并请求当前品种的所有合约 app = QApplication.instance() network_manager = getattr(app, "_network") url = SERVER + "{}/{}/contracts/".format(self.current_exchange, self.current_variety) reply = network_manager.get(QNetworkRequest(QUrl(url))) reply.finished.connect(self.variety_contracts_reply)
def click_variety(self, variety_en, exchange_lib): """ 点击选择品种 """ # 赋值类属性 self.current_variety = variety_en self.current_exchange = exchange_lib self.contract_combobox.clear() # 清空合约选择下拉项 # 发送请求获取当前品种所有交割月份合约 app = QApplication.instance() network_manager = getattr(app, "_network") url = SERVER + "{}/{}/contracts/".format(exchange_lib, variety_en) reply = network_manager.get(QNetworkRequest(QUrl(url))) reply.finished.connect(self.variety_contracts_reply)
def download(self): grab = None for x in range(self._tilesRect.width()): for y in range(self._tilesRect.height()): tp = Point(self._tilesRect.topLeft() + QPoint(x, y)) if tp not in self._tilePixmaps: grab = QPoint(tp) break if grab is None: self._url = QUrl() return path = 'http://tile.openstreetmap.org/%d/%d/%d.png' % ( self.zoom, grab.x(), grab.y()) self._url = QUrl(path) self.request = QNetworkRequest() self.request.setUrl(self._url) self.request.setRawHeader(b'User-Agent', b'Nokia (PyQt) Graphics Dojo 1.0') self.request.setAttribute(QNetworkRequest.User, grab) self._manager.get(self.request)
def modify_row_data(self): """ 修改数据表的单元格点击 """ btn = self.sender() row = getattr(btn, 'row_index') # 获取组织数据 item = { "id": int(self.modify_table.item(row, 0).text()), "date": self.modify_table.item(row, 1).text(), "variety_en": self.modify_table.item(row, 2).text(), "spot_price": float(self.modify_table.item(row, 3).text()), "price_increase": float(self.modify_table.item(row, 4).text()) } app = QApplication.instance() network_manager = getattr(app, "_network") url = SERVER + "spot/price/{}/".format(item["id"]) request = QNetworkRequest(QUrl(url)) request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json;charset=utf-8") reply = network_manager.put(request, json.dumps(item).encode("utf-8")) reply.finished.connect(self.modify_spot_price_reply)
def start(self): """ Start downloading the file specify by set_source """ filepath = self.destination.absoluteFilePath(self.source.fileName()) if QFile(filepath).exists(): QFile.remove(filepath) self._file = QFile(filepath) # open the file to write in if self._file.open(QIODevice.WriteOnly): print("open file", filepath) # Create a Qt Request request = QNetworkRequest() request.setUrl(self.source) self.time = QTime.currentTime() self.reply = self.net.get(request) # Connect reply to different slots self.reply.downloadProgress.connect(self.on_update_progress) self.reply.finished.connect(self.on_finished) self.reply.error.connect(self.on_error)
def createRequest(self, operation, request, data): if self._regex and self._regex.findall(str(request.url().toString())): return QNetworkAccessManager.createRequest( self, QNetworkAccessManager.GetOperation, QNetworkRequest(QUrl())) reply = QNetworkAccessManager.createRequest( self, operation, request, data ) reply.readyRead.connect(lambda reply=reply: replyReadyRead(reply)) time.sleep(0.001) return reply