- 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_()
- #该片段来自于http://www.codesnippet.cn/detail/211120137379.html
来源: http://www.codesnippet.cn/detail/211120137379.html