应用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作为脚本语言一个很重要的特点就是简单易用,而且拥有巨多的第三方库,几乎方方面面的库都有,无论你处于哪个行业,想做什么工作,几乎都能找到对应的第三方库 ...
随机推荐
- Android破解之北斗手机定位系统
我想破解GIS相关的安卓程序,于是找到了这个北斗手机定位系统,且不论它是否能定位,定位精度有多高,本文件只进行破解分析. 在模拟器中安装,输入手机号码,点击"卫星定位",它会一级一 ...
- Ubuntu下修改system.img 解包system.img、打包system.img
一.准备工作:解压解打包工具,得到三个文件:make_ext4fs.mkuserimg.sh.simg2img,把它们跟要修改的 .img.ext4(或.img)文件放置到同一个目录下 二.转换源文件 ...
- C++类模板
在上篇文章(C++函数模板)中,主要介绍了C++中函数模板,与函数相似,类也可以被一种或多种类型参数化.容器类就是一个具有这种特性的典型的例子, 本文地址:http://www.cnblogs.com ...
- 异步get请求之代理方法
#import "ViewController.h" #import "Header.h" @interface ViewController ()<NS ...
- 【原】visual studio添加现有文件夹的方法
由于使用版本管理器协调工作,有时同事就直接上传文件夹了,但右键添加现有项时不能添加文件夹的. 在工具栏"项目"下面有个"显示所有文件",选择这个,整个工程的文件 ...
- Android开发者的Git&GitHub(二)
将代码托管到GitHub上 点击右上角New repository按钮来创建一个版本库 命名后选择添加一个Android项目类型的.gitignore文件,并选择开源协议(例如:Apache v2 ...
- iOS开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)
前言:使用NSURLSessionDownloadTask满足不这个需要离线断点续传的下载需求,所以这里就需要使用NSURLSessionDataTask的代理方法来处理下载大文件,并且实现离线断点续 ...
- 关于IOS应用程序视图
积累英语词汇: assemble [ə'semb(ə)l] vt. 集合,聚集:装配:收集 assembled [ə'sembəld] adj. 组合的:安装的 v. 装配(assemble的过去分词 ...
- Jmeter调试工具---Debug Sampler
一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它有三个选项:JMeter properties,JMeter v ...
- VMware虚拟机网络环境类型
0x01. VMware Ubuntu虚拟机网络环境 ① Bridge桥接模式:虚拟机与物理机的IP同在一个网段:虚拟机独立且地位与物理机相同:虚拟机可直接访问物理机以及物理机相连的外部网络的主机或网 ...