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 29 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
Python实时获取cmd的输出
Dec 13 Python
python生成器表达式和列表解析
Mar 10 Python
python 字典(dict)按键和值排序
Jun 28 Python
浅谈Python实现贪心算法与活动安排问题
Dec 19 Python
图解Python变量与赋值
Apr 03 Python
如何将 awk 脚本移植到 Python
Dec 09 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
python 使用事件对象asyncio.Event来同步协程的操作
May 04 Python
pycharm 快速解决python代码冲突的问题
Jan 15 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 07 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中AES加密解密的例子小结
2014/02/18 PHP
php采用curl模仿登录人人网发布动态的方法
2014/11/07 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
2015/09/14 Javascript
jqTransform美化表单
2015/10/10 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
跟老齐学Python之重回函数
2014/10/10 Python
Python实现优先级队列结构的方法详解
2016/06/02 Python
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
使用Python绘制图表大全总结
2017/02/11 Python
在pycharm上mongodb配置及可视化设置方法
2018/11/30 Python
Python3 合并二叉树的实现
2019/09/30 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
木工主管岗位职责
2013/12/08 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
浅谈Node的内存泄露问题
2022/05/06 NodeJs
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android
如何解决flex文本溢出问题小结
2022/07/15 HTML / CSS