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 BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
python实现监控linux性能及进程消耗性能的方法
Jul 25 Python
Python中的条件判断语句基础学习教程
Feb 07 Python
Python通过命令开启http.server服务器的方法
Nov 04 Python
django项目运行因中文而乱码报错的几种情况解决
Nov 07 Python
图解Python变量与赋值
Apr 03 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
python实现对服务器脚本敏感信息的加密解密功能
Aug 13 Python
Python : turtle色彩控制实例详解
Jan 19 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 Python
python3让print输出不换行的方法
Aug 24 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
eclipse php wamp配置教程
2016/06/30 PHP
解决php extension 加载顺序问题
2019/08/16 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
微信小程序技巧之show内容展示,上传文件编码问题
2017/01/23 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
JS实现li标签的删除
2019/04/12 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
Python中利用函数装饰器实现备忘功能
2015/03/30 Python
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
Python装饰器原理与用法分析
2018/04/30 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
Django的性能优化实现解析
2019/07/30 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
审核会计岗位职责
2013/11/08 职场文书
咖啡厅创业计划书范本
2014/01/22 职场文书
共青团员自我评价范文
2014/09/14 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
简单介绍Python的第三方库yaml
2021/06/18 Python
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android