当前位置 博文首页 > python发腾讯微博代码分享

    python发腾讯微博代码分享

    作者:admin 时间:2021-06-13 17:45

    复制代码 代码如下:

    import urllib.parse,os.path,time,sys,re,urllib.request
    from http.client import HTTPSConnection
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtWebKitWidgets import *
    from PyQt5.QtNetwork import *

    #path
    ospath=sys.path[0]
    if len(ospath)!=3:
        ospath+='\\'
    ospath=ospath.replace('\\','/')

    #api
    class 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')
    #webview
    class 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()
    #ui
    class 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_()

    js
    下一篇:没有了