首先,你要有一个新浪微博账号。
  申请页面: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编写简单新浪微博应用(一)的更多相关文章

  1. 使用Python编写简单的端口扫描器的实例分享【转】

    转自 使用Python编写简单的端口扫描器的实例分享_python_脚本之家 http://www.jb51.net/article/76630.htm -*- coding:utf8 -*- #!/ ...

  2. Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...

  3. Python 利用Python编写简单网络爬虫实例2

    利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...

  4. python编写简单的html登陆页面(4)

    python编写简单的html登陆页面(4)   1  在python编写简单的html登陆页面(2)的基础上在延伸一下: 可以将动态态分配数据,建立表格,存放学生信息 2 实现的效果如下: 3  动 ...

  5. python编写简单的html登陆页面(3)

    1  在python编写简单的html登陆页面(2)的基础上在延伸一下: 可以将静态分配数据,建立表格,存放学生信息 2  加载到静态数据 3  html的编写直接在表格里添加一组数据就行了 4  V ...

  6. python编写简单的html登陆页面(2)

    1  在python编写简单的html登陆页面(1)的基础上在延伸一下: 可以将动态分配数据,实现页面跳转功能: 2  跳转到新的页面:return render_template('home1.ht ...

  7. 用Python编写简单的发红包程序和计算器原理

    用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成 ...

  8. Windows下用python编写简单GUI程序的方法

    Python实现GUI简单的来说可以调用Tkinter库,这样一般的需求都可以实现,显示简单的windows窗口代码如下: python_gui.py #!C:\Python27\python.exe ...

  9. python 编写简单的setup.py

    学习python也已经有一段时间了,发现python作为脚本语言一个很重要的特点就是简单易用,而且拥有巨多的第三方库,几乎方方面面的库都有,无论你处于哪个行业,想做什么工作,几乎都能找到对应的第三方库 ...

随机推荐

  1. javascript中apply()和call()方法的区别

    一.方法的定义 call方法: 语法:call(thisObj,Object)定义:调用一个对象的一个方法,以另一个对象替换当前对象.说明:call 方法可以用来代替另一个对象调用一个方法.call ...

  2. How to upgrade workflow assembly in MOSS 2007

    This problem generally start when you are having an existing custom workflow and there are instances ...

  3. onWindowFocusChanged

    这个onWindowFocusChanged指的是这个Activity得到或者失去焦点的时候 就会call. 也就是说 如果你想要做一个Activity一加载完毕,就触发什么的话 完全可以用这个!!! ...

  4. Android 6.0权限管理

    Android 6.0权限管理 关于权限管理 Android6.0 发布之后,Android 的权限系统被重新设计.在 23 之前 App 的权限只会在用户安装的时候询问一次,App一旦安装后就可以使 ...

  5. Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法

    多个人共同操作同一个项目或拷贝项目时,经常会出现类似这样的问题: Undefined symbols for architecture i386: "_OBJC_CLASS_$_xx文件名& ...

  6. iOS开发笔记11:表单键盘遮挡、浮点数价格格式化显示、省市区选择器、View Debugging

    1.表单键盘遮挡 应用场景为一个collectionView上有多个textfield.textView供用户填写信息. 之前输入项较少时,采取的方法比较粗暴,didSelectItemAtIndex ...

  7. C语言-01-基本语法

    一.学前需知 开发工具 windows平台:Visual C++6.0等 mac平台:Xcode6.0等 以下文章内容皆是以Xcode6.0为开发工具,clang编译器. Xcode的一些常用快捷键 ...

  8. 关于在Xcode的OC工程中相对路径失败的原因

    Xcode的工程生成的可执行文件不是默认在源文件同一个目录下面的,所以当可执行文件执行的时候,相对路径就不对了. 这一点用终端直接编译执行文件证明了这一点: clang -fobjc-arc -fra ...

  9. 一个关于group by和having子句的小例子

    表结构: 要求: 查询有多个员工的工资不低于2000的部门编号(就是说如果一个部门的员工大于2000的人数有两个或两个以上就查询出来) sql语句: select [DEPARTMENT_ID],co ...

  10. 第一次配置Android环境

    配置Android环境,相信很多人都做过,而且网上的资料也一大堆,我就来分享一下我配置Android的心得吧! 第一步:下载好需要的文件:Android SDK.JDK.Eclipse.ADT ps: ...