python发腾讯微博代码分享


Posted in Python onJanuary 10, 2014
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_()
Python 相关文章推荐
Python 实现简单的电话本功能
Aug 09 Python
Python中的descriptor描述器简明使用指南
Jun 02 Python
Python内置数据结构与操作符的练习题集锦
Jul 01 Python
[原创]教女朋友学Python(一)运行环境搭建
Nov 29 Python
在pycharm上mongodb配置及可视化设置方法
Nov 30 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
wxpython绘制音频效果
Nov 18 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
基于python调用jenkins-cli实现快速发布
Aug 14 Python
pytorch常用数据类型所占字节数对照表一览
May 17 Python
粗暴解决CUDA out of memory的问题
May 22 Python
Pandas 稀疏数据结构的实现
Jul 25 Python
python实现2014火车票查询代码分享
Jan 10 #Python
python抓取豆瓣图片并自动保存示例学习
Jan 10 #Python
python文件比较示例分享
Jan 10 #Python
python发送伪造的arp请求
Jan 09 #Python
python抓取京东价格分析京东商品价格走势
Jan 09 #Python
python实现电子词典
Apr 23 #Python
python中cPickle用法例子分享
Jan 03 #Python
You might like
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
php使用PDO操作MySQL数据库实例
2014/12/30 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
2016/10/13 PHP
浅谈PHP安全防护之Web攻击
2017/01/03 PHP
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
2008/09/08 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
简单的Jquery遮罩层代码实例
2013/11/14 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
Python批量修改文件后缀的方法
2014/01/26 Python
初步解析Python中的yield函数的用法
2015/04/03 Python
简单介绍Python中的floor()方法
2015/05/15 Python
python调用API实现智能回复机器人
2018/04/10 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
机械电子工程毕业生自荐信
2013/11/23 职场文书
历史专业个人求职信范文
2013/12/07 职场文书
毕业生自荐书
2014/02/03 职场文书
幼儿园辞职信
2015/05/13 职场文书
大学生暑假实习总结
2015/07/13 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
话题作文之自信作文
2019/11/15 职场文书
SpringBoot2 参数管理实践之入参出参与校验的方式
2021/06/16 Java/Android
Golang解析JSON对象
2022/04/30 Golang