python发微博升级版,python发微博,上次发了一个利用新浪微博


上次发了一个利用新浪微博的token发微博,但是需要手动获取token,有点麻烦,这次利用qwebview重写了一个。测试中由于会卡死在新浪登录授权界面,所以换成了腾讯微博,不过原理是一样的。

import urllib.parse,os.path,time,sys,re,urllib.requestfrom http.client import HTTPSConnectionfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *from PyQt5.QtWebKitWidgets import *from PyQt5.QtNetwork import *#pathospath=sys.path[0]if len(ospath)!=3:    ospath+='\\\\'ospath=ospath.replace('\\\\','/')#apiclass Api:    def getOpenid(self,token):        url="https://graph.qq.com/oauth2.0/me?access_token=%s" % token        u=urllib.request.urlopen(url)        data=u.read()        try:            data=data.decode('utf-8')        except:            data=data.decode('gbk')        openid=re.findall('"openid":"(.+?)"',data)[0]        return openid    def qq(self,token,status,pic):        fSize=os.path.getsize(pic)        BOUNDARY="$-img-lufei-goodboy-$"        CRLF='\\r\\n'        data=[            '--'+BOUNDARY,            'Content-Disposition: form-data; name="access_token"',            '',            token,            '--'+BOUNDARY,            'Content-Disposition: form-data; name="openid"',            '',            self.getOpenid(token),            '--'+BOUNDARY,            'Content-Disposition: form-data; name="oauth_consumer_key"',            '',            '100451446',            #status            '--'+BOUNDARY,            'Content-Disposition: form-data; name="content"',            '',            status,            #pic            '--'+BOUNDARY,            'Content-Disposition: form-data; name="pic"; filename="q_17.jpg"',            'Content-Type: image/jpeg',            ''        ]        #utf-8        data=(CRLF.join(data)+CRLF).encode('utf-8')        closing='\\r\\n--'+BOUNDARY+'--\\r\\n'        sumlen=len(data)+len(closing)+fSize        #----------------------------------------        h=HTTPSConnection('graph.qq.com')        h.putrequest('POST','/t/add_pic_t')        h.putheader('Content-Type','multipart/form-data; boundary=%s' % BOUNDARY)        h.putheader('Content-Length',sumlen)        h.endheaders()        h.send(data)        f=open(pic,'rb')        while True:            data=f.read(12345)            if not data:                break            h.send(data)        f.close()        h.send(closing.encode('utf-8'))        r=h.getresponse()        return r.read().decode('utf-8','ignore')#webviewclass WebView(QWebView):    token=None    def __init__(self):        super().__init__()        self.resize(800,500)        self.setWindowFlags(Qt.FramelessWindowHint|Qt.X11BypassWindowManagerHint|Qt.Tool)        self.cookieJar=QNetworkCookieJar()        self.page().networkAccessManager().setCookieJar(self.cookieJar)        url="https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=%s&redirect_uri=%s&state=%s" % ('100451446','http://lufei.fboat.net/api/qq.php','---I---Love---You---')        self.load(QUrl(url))        #sigal        self.loadProgress.connect(self.judge)    def judge(self):        url=re.findall(r"'(.+?)'",str(self.url()))[0]        if url=='http://lufei.fboat.net/':            for x in self.cookieJar.allCookies():                if x.domain()=='lufei.fboat.net' and x.name()=='token':                    self.token=re.findall("'(.+?)'",str(x.value()))[0]            self.close()#uiclass Dialog(QDialog):    def __init__(self):        super().__init__()        #icon,title        self.setWindowIcon(QIcon(ospath+'weibo.ico'))        self.setWindowTitle('weibo')        #texteditor        self.editor=QTextEdit()        #textline,filebutton,submit,login        self.line=QLineEdit()        brows=QPushButton('打开')        brows.clicked.connect(self.getFileName)        submit=QPushButton('发表')        submit.clicked.connect(self.submit)        login=QPushButton('登录')        login.clicked.connect(self.view)        #layout        layout=QGridLayout()        layout.setContentsMargins(0,0,0,0)        #addwidget        layout.addWidget(self.editor,0,0,1,2)        layout.addWidget(self.line,1,0,1,1)        layout.addWidget(brows,1,1,1,1)        layout.addWidget(submit,2,0,1,1)        layout.addWidget(login,2,1,1,1)        #set        self.setLayout(layout)    def getFileName(self):        fileName=QFileDialog.getOpenFileName()        self.line.setText(fileName[0])    def view(self):        webView.show()    def submit(self):        status=self.editor.toPlainText()        pic=self.line.text()        self.editor.setText(api.qq(webView.token,status,pic))app=QApplication(sys.argv)webView=WebView()api=Api()dialog=Dialog()dialog.show()app.exec_()#该片段来自于http://byrx.net

评论关闭