应用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作为脚本语言一个很重要的特点就是简单易用,而且拥有巨多的第三方库,几乎方方面面的库都有,无论你处于哪个行业,想做什么工作,几乎都能找到对应的第三方库 ...
随机推荐
- Css文字特效之text-shadow特效
今天总结一下文字特效text-shadow,如果用好它可以做出各种不一样的效果,下图是我做出的几种效果. 怎么样,看起来很不错吧,下面贴代码. /* css */ p{ width:300px; ma ...
- Masonry第三方代码约束
#import "RootViewController.h" #import "Masonry.h" @interface RootViewController ...
- WPF Caliburn.Micro ListView 批量删除 新方法.高效的
上一片我做的批量删除,是更具ListView的选项改变事件,然后放到一个全局变量里面,缺点已经说了.这次又找到一个好的方法.和大家分享一下.这次我将删除按钮的click事件里面的参数绑定为ListVi ...
- IOS之--UI进阶--多控制器管理第一天
01-项目中常见的文件(LaunchScreen) Xcode5 框架是苹果事先已经导入进去的.在项目的结构当中就能够看到导入的框架. Xcode6 会自动导入一些觉见的框架.在项目结构当中,看不到已 ...
- Objective-C之用C的字符来处理NSString相关的字符替换和拼接的问题
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- Cocos2d-x 基础元素
看过本章,然后实践之后,应该会掌握以下的认识: 1.Cocos2d-x引擎的基本运转过程 2.Cocos2d-x引擎的一些初始设置 3.对导演及图层及现实对象的认识 4.如何定义自己的显示对象 *:f ...
- office2010安装报错
有没有童鞋,在第一次安装office 2010的时候,中途不管是何原因导致中断或者未安装成功的 然后从第二次开始就一直安装报错??? 哈哈,我最近就遇到了 其他很简单,网上有很多方法,也有很多步骤,包 ...
- iperf测试
在服务端运行iperf,输入命令iperf –s –p 12345 –i 1 –M 以在本机端口12345上启用iperf 在客户端运行iperf,输入命令iperf –c server-ip –p ...
- emacs下安装pip
Ubuntu13.10下安装pip的方法 $ sudo apt-get install python-pip python-dev build-essential $ sudo pip inst ...
- APACHE重写去除入口文件index.php
下面我说下 apache 下 ,如何 去掉URL 里面的 index.php 例如: 你原来的路径是: localhost/index.php/index 改变后的路径是: localhost/ind ...