应用python编写简单新浪微博应用(一)
申请页面:http://weibo.com
其次,你要在新浪微博的开发平台中创建一个应用,获取自己专属的App Key和App Secret。
申请页面:http://open.weibo.com/development
再次,你要下载一个sinatpy开发包,这个开发包里没有setup.py,手工解压后将weibopy目录拷贝至python的库目录下即可。
下载页面:http://code.google.com/p/sinatpy/downloads/list
特别注意:据个人测试,该开发包最低支持python2.4,但需要同时拷贝simplejson目录至python的库目录下。
至此,一切条件均已齐备。虽然我下面会给出具体的代码范例说明如何调用开发包中的相应函数完成基本的应用授权、获取用户信息、发布微博消息、获取微博消息列表、获取指定微博消息等操作,但还是希望开发者能先行详细阅读新浪微博开发平台中提供的所有文档,特别是授权机制说明,我在文中不会再赘述相关背景资料。
文档页面:http://open.weibo.com/wiki
一、应用验证相关代码
以下的代码属于基础代码,之后各个步骤的代码均需承接以下代码。
from weibopy.auth import OAuthHandler;
from weibopy.api import API;
#此应用的开发者密钥(此处应替换为创建应用时获取到的开发密钥)
APP_KEY = '';
APP_SECRET = 'abcdefghijklmnopqrstuvwxyz123456';
#设定网页应用回调页面(桌面应用设定此变量为空)
BACK_URL = "http://beauty.hit.edu.cn/backurl";
#验证开发者密钥.
auth = OAuthHandler( APP_KEY, APP_SECRET, BACK_URL );
二、应用授权相关代码
#获取授权页面网址.
auth_url = auth.get_authorization_url();
#取出请求令牌密钥(桌面应用跳过此处)
rtKey = auth.request_token.key;
rtSecret = auth.request_token.secret;
进行到这一步针对桌面应用和网页应用有两个不同的分支:
1、桌面应用将授权页面网址提供给用户,用户访问授权页面,输入用户名和密码并通过验证之后,获取到一个授权码,回到桌面应用中提交该授权码。
2、网页应用直接将用户引导至授权页面,引导前应将rtKey和rtSecret缓存到Session中。当用户在授权页面输入用户名和密码并通过验证之后,授权页面会调用网页应用的回调页面,同时传递参数oauth_token和oauth_verifier,其中oauth_token应和rtKey相同(回调页面中需确认此处),而oauth_verifier即为授权码,下文中简称为verifier。
有了授权码verifier之后,加上之前缓存在Session中的rtKey和rtSecret便可获取用户令牌密钥。
#设定请求令牌密钥(桌面应用跳过此句)
auth.set_request_token( rtKey, rtSecret );
#获取用户令牌密钥.
access_token = auth.get_access_token( verifier );
atKey = access_token.key;
atSecret = access_token.secret;
终于,我们获取到了用户令牌密钥atKey和atSecret,接下来的所有步骤都需要用这两个参数来验证用户的身份。
三、获取用户信息
from weibopy.error import WeibopError;
#设定用户令牌密钥.
auth.setToken( atKey, atSecret );
#绑定用户验证信息.
api = API(auth);
#获取用户信息.
try:
user = api.verify_credentials();
except WeibopError, e:
return e.reason; #用户ID
userid = user.id;
#用户昵称.
username = user.screen_name.encode('utf-8');
四、发布微博消息
from weibopy.error import WeibopError;
#设定用户令牌密钥.
auth.setToken( atKey, atSecret );
#绑定用户验证信息.
api = API(auth);
#如果不传送图片.
if ( ImagePath == None );
#发布普通微博.
try:
#message为微博消息,lat为纬度,long为经度.
api.update_status( message, lat, long );
except WeibopError, e:
return e.reason; #如果传送图片.
else:
#发布图文微博.
try:
#ImagePath为图片在操作系统中的访问地址,其余同上.
api.upload( ImagePath, message, lat, long );
except WeibopError, e:
return e.reason;
五、获取微博消息列表
#设定用户令牌密钥.
auth.setToken( atKey, atSecret );
#绑定用户验证信息.
api = API(auth); WeiboList = [];
#获取微博列表.
#count为每页消息数量,page为从1开始计数的页码.
try:
timeline = api.user_timeline( count = count, page = page );
except:
return None;
#对微博列表中的微博信息进行逐个枚举.
for status in timeline:
weibo = {};
#微博id
weibo["id"] = status.id;
#微博创建时间.
weibo["created"] = status.created_at;
#微博发布用户.
weibo["user"] = status.user.name.encode('utf-8');
#微博文字.
weibo["text"] = status.text.encode('utf-8');
#微博来源.
weibo["source"] = status.source.encode('utf-8'); #地理信息.
coordinates = getattr( status.geo,
"coordinates", None );
if ( coordinates ):
#地理信息纬度.
weibo["lat"] = coordinates[0];
#地理信息经度. weibo["long"] = coordinates[1];
else:
weibo["lat"] = None;
weibo["long"] = None; #引用微博.
refer = getattr( status,
"retweeted_status", None );
if ( refer ):
#引用微博发布用户.
weibo["ruser"] = refer.user.name.encode('utf-8');
#引用微博文字.
weibo["rtext"] = refer.text.encode('utf-8');
else:
weibo["ruser"] = None;
weibo["rtext"] = None; #附图原图.
weibo["orgpic"] = getattr( status,
"original_pic", None );
#附图中型图.
weibo["midpic"] = getattr( status,
"bmiddle_pic", None );
#附图缩略图.
weibo["thumb"] = getattr( status,
"thumbnail_pic", None ); WeiboList.append( weibo ); return WeiboList;
六、获取单条微博消息
此处sinatpy开发包中的相关代码存在问题,调用绑定json函数时显示404错误,出于种种考虑没有直接修改api,而是在调用代码中进行了重新绑定处理。
from weibopy.binder import bind_api; #设定用户令牌密钥.
auth.setToken( atKey, atSecret );
#绑定用户验证信息.
api = API(auth); path = '/statuses/show/' + str(id) + '.json';
try:
#重新绑定get_status函数
get_status = bind_api( path = path,
payload_type = 'status' );
except:
return "**绑定错误**";
#获取微博消息.
status = get_status( api );
#以下参考获取微博消息列表中相关代码
应用python编写简单新浪微博应用(一)的更多相关文章
- 使用Python编写简单的端口扫描器的实例分享【转】
转自 使用Python编写简单的端口扫描器的实例分享_python_脚本之家 http://www.jb51.net/article/76630.htm -*- coding:utf8 -*- #!/ ...
- Python 利用Python编写简单网络爬虫实例3
利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...
- Python 利用Python编写简单网络爬虫实例2
利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...
- python编写简单的html登陆页面(4)
python编写简单的html登陆页面(4) 1 在python编写简单的html登陆页面(2)的基础上在延伸一下: 可以将动态态分配数据,建立表格,存放学生信息 2 实现的效果如下: 3 动 ...
- python编写简单的html登陆页面(3)
1 在python编写简单的html登陆页面(2)的基础上在延伸一下: 可以将静态分配数据,建立表格,存放学生信息 2 加载到静态数据 3 html的编写直接在表格里添加一组数据就行了 4 V ...
- python编写简单的html登陆页面(2)
1 在python编写简单的html登陆页面(1)的基础上在延伸一下: 可以将动态分配数据,实现页面跳转功能: 2 跳转到新的页面:return render_template('home1.ht ...
- 用Python编写简单的发红包程序和计算器原理
用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成 ...
- Windows下用python编写简单GUI程序的方法
Python实现GUI简单的来说可以调用Tkinter库,这样一般的需求都可以实现,显示简单的windows窗口代码如下: python_gui.py #!C:\Python27\python.exe ...
- python 编写简单的setup.py
学习python也已经有一段时间了,发现python作为脚本语言一个很重要的特点就是简单易用,而且拥有巨多的第三方库,几乎方方面面的库都有,无论你处于哪个行业,想做什么工作,几乎都能找到对应的第三方库 ...
随机推荐
- javascript宿主对象之window.history
window.historys属性允许我们操作同一个浏览器回话中的已访问页面,例如我们可以看到在这之前我们浏览页面的数量: window.history.length 由于隐私保护,我们无法获取这些页 ...
- 用jq编码解码一个url地址
介绍一下编码解码函数对 1. escape /unescape 主要用于汉字编码,返回字符的unicode编码值, 对“+”不能编码 2. encodeURI / decodeURI ...
- 删除src值为空的img标签
今天刚刚完成了一个官网的前后台整站建设,虽然不是很复杂,但感觉获益良多.由于涉及到一点后台问题,所以期间遇到了不少问题.学到的东西,得作个总结.今天先讲讲img的路径问题.由于现在很多网站喜欢全屏大图 ...
- 导出你的GAC Assembly中的DLLS -- 金大昊(jindahao)
导出你的GAC Assembly中的DLLS 方法1: CMD命令中,进入C:\windows\assembly,然后XCOPY GAC_MSIL c:\temp /E 这样就得到了dlls了,以 ...
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q63-Q65)
Question 63You have a SharePoint farm that has more than 100 custom Features.You upgrade several Fea ...
- [leetcode] Contains Duplicate II
Contains Duplicate II Given an array of integers and an integer k, find out whether there there are ...
- 高级iOS面试题
非标准答案 2 1: 类方法是可以直接通过类名直接调用,无需进行实例化对象.类方法是以+开头2. 实例方法,需要显示实例化对象,为对象分配堆栈空间,并通过对象实例调用实例方法3. RUNTIME 是在 ...
- iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄
前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传. 在实际开发中,输入输出流用的比较少,但 ...
- 网络请求的基本知识《极客学院 --AFNetworking 2.x 网络解析详解--1》学习笔记
网络请求的基本知识 我们网络请求用的是HTTP请求 Http请求格式:请求的方法,请求头,请求正文 Http请求的Request fields:请求的头部,以及被请求头部的一些设置 Http请求的 ...
- android EditView ime
1.android:imeOptions 可以用来配置输入法右下角的: 这可以在xml中添加相应的属性android:imeOptions actionGo 输入法右下角显示“去往” actionS ...