python使用新浪微博api上传图片到微博示例


Posted in Python onJanuary 10, 2014
import urllib.parse,os.path,time,sys
from http.client import HTTPSConnection
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
#path
ospath=sys.path[0]
if len(ospath)!=3:
    ospath+='\\'
ospath=ospath.replace('\\','/')
#api
class Api:
    def sina(self,status,pic):
        fSize=os.path.getsize(pic)
        BOUNDARY="$-img-lufei-goodboy-$"
        CRLF='\r\n'
        data=[
            #token
            '--'+BOUNDARY,
            'Content-disposition: form-data; name="access_token"',
            '',
            'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',#你的access_token
            #status
            '--'+BOUNDARY,
            'Content-disposition: form-data; name="status"',
            '',
            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('upload.api.weibo.com')
        h.putrequest('POST','/2/statuses/upload.json')
        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')
api=Api()
#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
        self.line=QLineEdit()
        brows=QPushButton('打开')
        brows.clicked.connect(self.getFileName)
        submit=QPushButton('发表')
        submit.clicked.connect(self.submit)
        #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,2)
        #set
        self.setLayout(layout)
    def getFileName(self):
        fileName=QFileDialog.getOpenFileName()
        self.line.setText(fileName[0])
    def submit(self):
        status=self.editor.toPlainText()
        pic=self.line.text()
        self.editor.setText(api.sina(status,pic))
app=QApplication(sys.argv)
dialog=Dialog()
dialog.show()
app.exec_()
Python 相关文章推荐
Python实现的监测服务器硬盘使用率脚本分享
Nov 07 Python
python从入门到精通(DAY 3)
Dec 20 Python
Python脚本实现自动将数据库备份到 Dropbox
Feb 06 Python
分析Python读取文件时的路径问题
Feb 11 Python
python实现傅里叶级数展开的实现
Jul 21 Python
浅谈Python中的bs4基础
Oct 21 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
Sep 25 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
python sklearn常用分类算法模型的调用
Oct 16 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
python爬虫爬取图片的简单代码
Jan 18 Python
python发腾讯微博代码分享
Jan 10 #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
You might like
yii2简单使用less代替css示例
2017/03/10 PHP
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
Bootstrap每天必学之下拉菜单
2015/11/25 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
详解Angularjs中的依赖注入
2016/03/11 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
vue单个组件实现无限层级多选菜单功能
2018/04/10 Javascript
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
js实现div色块碰撞
2020/01/16 Javascript
[00:48]DOTA2国际邀请赛公开赛报名开始 扫码开启逐梦之旅
2018/06/06 DOTA
python sys模块sys.path使用方法示例
2013/12/04 Python
Python中使用ElementTree解析XML示例
2015/06/02 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
Python初学者需要注意的事项小结(python2与python3)
2018/09/26 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
Python如何将字符串转换为日期
2020/07/31 Python
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
男女时尚与复古风格在线购物:RoseGal(全球免费送货)
2017/07/19 全球购物
自荐信的禁忌和要点
2013/10/15 职场文书
大学课外活动总结
2014/07/09 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
六一活动主持词
2015/06/30 职场文书
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python