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 相关文章推荐
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
Jun 25 Python
Python的Django框架下管理站点的基本方法
Jul 17 Python
详解Golang 与python中的字符串反转
Jul 21 Python
Django中的Model操作表的实现
Jul 24 Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 Python
django富文本编辑器的实现示例
Apr 10 Python
python3.7 的新特性详解
Jul 25 Python
Python求平面内点到直线距离的实现
Jan 19 Python
如何使用 Flask 做一个评论系统
Nov 27 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
Dec 09 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 Python
Python  lambda匿名函数和三元运算符
Apr 19 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
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
PHP SplObjectStorage使用实例
2015/05/12 PHP
php生成验证码函数
2015/10/20 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Python 实现简单的电话本功能
2015/08/09 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
致裁判员加油稿
2014/02/08 职场文书
党支部换届选举方案
2014/05/08 职场文书
三严三实心得体会范文
2014/10/13 职场文书
搞笑结婚保证书
2015/05/08 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
golang 实用库gotable的具体使用
2021/07/01 Golang