C调用新浪微博API生成
新浪微博API开发教程(一)-体验篇
现在新浪微博开放平台()非常火啊,所以。
。
,你懂的! 首先,想要开发新浪微博 API,你就必须获取 APP KEY 和 APP SECRET,我毫不犹豫的就用 新浪微博账号登录了开放平台,创建了自己的应用如下:然后又去下载了新浪微博开发平台基于 PHP 的 SDK 包(包含 demo 程序) ,这个下载地址 是: /p/libweibo/downloads/detail?name=weibo-oauth-classwith-image-avatar-06-29.zip OK,一切完毕,首先解压 SDK 包后里面有如下5个文件,一一介绍下: config.php 是配置文件index.php 进入到新浪微博的验证授权页面 同意授权之后 回到 callback.php 页面 weibolist.php 微博发表以及列表页 weibooauth.php 类文件, 装着许多类和函数, 开发中需要用到的! 后期 php 教程再说! ( ) 开始进行测试: 首先打开 config.php 文件,填上 APP KEY 和 APP SECRET,否则授权失败!打开浏览器:http://localhost/zend/SinaApi/出现:Use Oauth to login 点击进入,居然报错(如下) ,真是打击我的信心啊!sorry, that page doesn’t exist!通过查阅资料发现是这个原因,index.php 的第16、17行: $_SERVER['SCRIPT_URI'] 错误,貌似 php 里面也没 SCRIPT_URI 这参数吧,好吧,将第 16、17行,的 $_SERVER['SCRIPT_URI'] 改为本地地址:'http://localhost/zend/SinaApi' 果然,点击进入后,显示授权成功,授权完成,进入你的微博列表页面 weobolist.php,有点小兴奋了!需要注意几点: 1.官方 SDK 中,有<?=?>段标签模式,这是 php 默认不开启的,你可以 改成<?php echo ?>2.注意编码问题,官方是用 UTF-8编码的!转 载 请 声 明 : 文 章 转 载 自 : PHP 点 点 通 , 原 文 地 址 :/php/sina-api.html。
新浪微博开放平台api
用java开发新浪微博的API首先先注册新浪微博(如果有了的可以直接登录)在进入新浪微博的开放平台下载SDK 下载最新的SDK /wiki/SDK然后把SDK 导入到MyEclipse 里接着在进入新浪微博的开放平台点击我要成为开发者注册1.填写开发者资料2.验证邮箱3.创建应用/添加网站点击创建应用有5种应用选择站内应用然后把信息填完点击创建成功后在应用基本信息里就会显示App Key 和App Secret再接着往下看会看到站内应用地址和应用实际地址记住填写的内容回到MyEclipse在src下面找到config.properties填写client_ID =App Keyclient_SERCRET =App Secretredirect_URI =应用实际地址(也可以不写我就没有写)保存接着就是写一条获取微博的前20条信息在examples 下的weibo4j.examples.oauth2下的OAuth4Code下直接运行(如果报错把改成),就会出现授权页面,登录,登录成功后,点击授权查看网址后面有个code=XXXX把code=后面的XXXX复制到MyEclipse 的控制台中的https:///oauth2/authorize?client_id=1682103644&redir ect_uri=/boyaboya&response_type=code&state=& scope=Hit enter when it's done.[Enter]:后面然后按回车就会输出一大堆消息直接跳到最后会看到记住"access_token" 后面的值就是是我们要用到的值了记录下来下面开始获取微博最新的前20条信息喽weibo4j.examples.timeline 下的 GetPublicTimeline 类中代码如下package weibo4j.examples.timeline;import java.util.List;import weibo4j.Timeline;import weibo4j.Weibo;import weibo4j.examples.oauth2.Log;import weibo4j.model.PostParameter;import weibo4j.model.Status;import weibo4j.model.StatusWapper;import weibo4j.model.WeiboException;import weibo4j.util.WeiboConfig;public class GetPublicTimeline {/***获取最新更新的公共微博消息*@param args*/public static void main(String[] args) {String access_token = "2.00zd8kXCwzvppB3d7bd9a1722AINVD";Weibo weibo=new Weibo();weibo.setToken(access_token);Timeline tm = new Timeline();tm.client.setToken(access_token);try {StatusWapper status = tm.getPublicTimeline();for(Status s : status.getStatuses()){Log.logInfo(s.toString());}System.out.println(status.getNextCursor());System.out.println(status.getPreviousCursor());System.out.println(status.getTotalNumber());System.out.println(status.getHasvisible());} catch (WeiboException e) {e.printStackTrace();}}}写完直接运行在控制台中就会直接输出最新的的前20条微博了。
php获取新浪微博数据API的实例代码
php获取新浪微博数据API的实例代码分享下php取得新浪微博数据API的一个例子,学习下在php编程中,使用新浪微博数据API进行开发的方法,感兴趣的朋友可以参考下。
php获取新浪微博数据API要取得新浪微博的数据,可以通过其提供的API,地址:open.weibo/wiki/API文档_V2。
获取数据的方法:复制代码代码示例:<?php/***通过新浪微博数据API取得微博数据*edit:jbxue*/functiongetWeiboData(){$count=15;//参数source后面输入你的授权号$url="api.weibo/2/statuses/home_timeline.json?source=12 3456789&count=".$count."&page=1";echo$url.'<br/>';$curl=curl_init();curl_setopt($curl,CURLOPT_URL,$url);//设置是否显示header信息0是不显示,1是显示默认为0//curl_setopt($curl,CURLOPT_HEADER,0);//设置cURL参数,要求结果保存到字符串中还是输出到屏幕上。
0显示在屏幕上,1不显示在屏幕上,默认为0curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);//要验*的用户名密码curl_setopt($curl,CURLOPT_USERPWD,"username:password" );$data=curl_exec($curl);curl_close($curl);$result=json_decode($data,true);echo'<pre>';print_r($result);echo'</pre>';}>说明:json_decode($data)会输出一个对象,而json_decode($data,true)则强制输出为数组。
新浪接口API调用
新浪接口API调用新浪API2.0调用痕迹最近本人研究怎么调用新浪的接口。
一开始由于感觉时间的仓促就从网上找了个实例。
哪知道在模拟授权成功了以后进行接口的调用的时候才知道知道。
人家验证是OAuth1.0认证。
而现在新浪接口是1.0的。
老是调用的时候报Http403 五位码表示access_token无效。
这样一来我都弄疯了,连续折腾了3天,我都太折腾疯了。
总结一句话哥太心急了。
搞了半天就是找错。
问人。
折腾了半天。
没有啥人能帮上忙。
所以我就下定决心研究别人代码。
通过我晚上苦苦的研究终于弄清楚了点思路了。
第二天早上一起来灵感移动。
其实真的他妈那么简单啊。
下面我就给大家介绍我的实现思路。
当然我也借助了别人写的SDK.加以我的改变生产了dll文件。
提供后续开发这学习。
我提供下载地址。
希望能给苦命的程序员又所帮助。
尤其是像我这样的菜鸟。
老鸟当然不需要这些的。
废话都不说了。
下面就介绍下实现思路吧。
1首先我介绍下OAuth授权的内部原理:A:客户端从服务器端获取一个没有经过授权的tonken(一个32位的字符串)B:用户从客户端获取一个验证编号。
C:客户端向服务器端获取一个成功的授权编号现在也不说这些内部原理了:直接阐述代码吧。
const long clientID = 1253617897;//申|¨o请?的ì?app_key//获取程序keyconst string responseType = "authorization_code";//这个值好像可以起好多的。
集体是代表什么我还是希望别人多多参考新浪APIconst string redirectUri = "http://localhost:1978/sina/URLredirection.aspx";//回?调ì??地ì?址?¤这个回调地址是设置在新浪申请的应该平台里面的。
新浪微博开发者平台应用申请及配置说明
第一章常见问题说明在本项目微博开发文档中大家使用新浪微博官方提供的WeiboSDKDemo为大家演示项目基本环境的搭建,后面的开发也是在此基础上进行开发,目的是方便大家学习和理解项目结构、新浪微博的认证授权及新浪微博API调用。
WeiboSDKDemo使用的appkey、授权回调地址和debug.keystore均是新浪微博官提供的,并且WeiboSDKDemo的包名不能更改,在大家熟悉项目结构之后,也可以自己在新浪微博开放平台上申请开发者账号,并且创建自己的应用,就不必使用新浪微博官方提供的了,创建过程可以参考第二章和第三章。
在使用WeiboSDKDemo注意事项:1.使用WeiboSDKDemo时不能更改WeiboSDKDemo中所用的包名(com.sina.weibo.sdk.demo),在src根目录下的Constants.java文件中提供了AppKey ,一定要使用这个appKey,否则将会导致新浪官方的授权认证服务器上的签名认证失败。
2.一定要使用Demo中提供的debug.keystore3.MD5工具是根据keystore来生成签名的,不同的keystore生成的签名是不一样的。
此Demo的签名是用官网提供的keystore生成的,若要顺利运行Demo程序,需要进行设置或是替换keystore,两种方法可以选择其中一种进行操作:方法一:替换keystore,把Android默认的debug.keystore(在C:\Users\xxxx\.android目录下)替换成官方在Hithub上提供的debug.keystore。
方法二:在Eclipse中设置工程keystore,在Eclipse中点击“Windows -> Preferences -> Android -> Build”,在Custom debug keystore 中选择Demo中的debug.keystore,点击Apply -> OK,Demo即可正常运行。
新浪微博的API
1,开发流程技术规范与指南目录隐藏∙ 1 概述∙ 2 开发流程o 2.1 申请APPKEYo 2.2 应用创建及发布流程∙ 3 开发指南o 3.1 SDK简介及作用o 3.2 如何通过授权访问数据3.2.1 OAUTH认证o 3.3 如何访问匿名接口o 3.4 接口数据如何适当的缓存o 3.5 如何避免rate limito 3.6 技术咨询和建议通过何种途径询问概述API平台应用日益丰富,为了让开发者更容易了解开发流程;为了规范API的接口,需要制定开发规范;为了对开发者进行一些深层次的指导,让开发者怎样来最优的访问API接口,特此制定开发流程技术规范与指南。
开发流程申请APPKEY1. 进入2. 如果您有新浪微博账户,可以直接登录,没有则注册一个微博账户后登录3. 登录后进入我的应用,创建一个应用4. 创建完成后会生成对应的appkey,app_secret,记住:您的app_key别对外泄露。
应用创建及发布流程应用的创建及发布包括下面的流程,开发者可以根据应用当前的状态进行相应的操作开发指南SDK简介及作用SDK是特定语言实现的一个可以通用的API使用的工具,SDK实现了新浪开放平台的全部或大部分接口,以便开发者不用关心API接口细节,认证实现等,可以直接调用接口完成特定的功能。
支持新浪微博开放平台接口的SDK语言包括Adobe air,c++,c#,java,php,python,ios等,具体请参考SDK列表页面如何通过授权访问数据微博开放平台对外支持两种用户认证方式,Basic auth以及OAUTH认证微博开放平台对外支持两种用户认证方式,Basic auth以及OAUTH认证OAUTH认证OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。
关于OAUTH协议可以参考使用OAUTH认证来获取微博数据介绍详细见:OAuth如何访问匿名接口为了方便一些应用在没有用户认证情况下需要获取一些数据,微博开放平台提供了一些匿名访问接口。
Python爬虫爬取新浪微博内容示例【基于代理IP】
Python爬⾍爬取新浪微博内容⽰例【基于代理IP】本⽂实例讲述了Python爬⾍爬取新浪微博内容。
分享给⼤家供⼤家参考,具体如下:⼀般做爬⾍爬取⽹站,⾸选的都是m站,其次是wap站,最后考虑PC站。
当然,这不是绝对的,有的时候PC站的信息最全,⽽你⼜恰好需要全部的信息,那么PC站是你的⾸选。
⼀般m站都以m开头后接域名,所以本⽂开搞的⽹址就是 。
前期准备1.代理IP2.抓包分析通过抓包获取微博内容地址,这⾥不再细说,不明⽩的⼩伙伴可以⾃⾏百度查找相关资料,下⾯直接上完整的代码完整代码:# -*- coding: utf-8 -*-import urllib.requestimport json#定义要爬取的微博⼤V的微博IDid='1259110474'#设置代理IPproxy_addr="122.241.72.191:808"#定义页⾯打开函数def use_proxy(url,proxy_addr):req=urllib.request.Request(url)req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")proxy=urllib.request.ProxyHandler({'http':proxy_addr})opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)urllib.request.install_opener(opener)data=urllib.request.urlopen(req).read().decode('utf-8','ignore')return data#获取微博主页的containerid,爬取微博内容时需要此iddef get_containerid(url):data=use_proxy(url,proxy_addr)content=json.loads(data).get('data')for data in content.get('tabsInfo').get('tabs'):if(data.get('tab_type')=='weibo'):containerid=data.get('containerid')return containerid#获取微博⼤V账号的⽤户基本信息,如:微博昵称、微博地址、微博头像、关注⼈数、粉丝数、性别、等级等def get_userInfo(id):url='https:///api/container/getIndex?type=uid&value='+iddata=use_proxy(url,proxy_addr)content=json.loads(data).get('data')profile_image_url=content.get('userInfo').get('profile_image_url')description=content.get('userInfo').get('description')profile_url=content.get('userInfo').get('profile_url')verified=content.get('userInfo').get('verified')guanzhu=content.get('userInfo').get('follow_count')name=content.get('userInfo').get('screen_name')fensi=content.get('userInfo').get('followers_count')gender=content.get('userInfo').get('gender')urank=content.get('userInfo').get('urank')print("微博昵称:"+name+"\n"+"微博主页地址:"+profile_url+"\n"+"微博头像地址:"+profile_image_url+"\n"+"是否认证:"+str(verified)+"\n"+"微博说明:"+description+"\n"+"关注⼈数:"+str(guanzhu)+"\n"+"粉丝数:"+str(fensi)+"\n"+"性别:"+gender+"\n"+"微#获取微博内容信息,并保存到⽂本中,内容包括:每条微博的内容、微博详情页⾯地址、点赞数、评论数、转发数等def get_weibo(id,file):i=1while True:url='https:///api/container/getIndex?type=uid&value='+idweibo_url='https:///api/container/getIndex?type=uid&value='+id+'&containerid='+get_containerid(url)+'&page='+str(i)try:data=use_proxy(weibo_url,proxy_addr)content=json.loads(data).get('data')cards=content.get('cards')if(len(cards)>0):for j in range(len(cards)):print("-----正在爬取第"+str(i)+"页,第"+str(j)+"条微博------")card_type=cards[j].get('card_type')if(card_type==9):mblog=cards[j].get('mblog')attitudes_count=mblog.get('attitudes_count')comments_count=mblog.get('comments_count')created_at=mblog.get('created_at')reposts_count=mblog.get('reposts_count')scheme=cards[j].get('scheme')text=mblog.get('text')with open(file,'a',encoding='utf-8') as fh:fh.write("----第"+str(i)+"页,第"+str(j)+"条微博----"+"\n")fh.write("微博地址:"+str(scheme)+"\n"+"发布时间:"+str(created_at)+"\n"+"微博内容:"+text+"\n"+"点赞数:"+str(attitudes_count)+"\n"+"评论数:"+str(comments_count)+"\n"+"转发数:"+str(reposts_count)+"\n")i+=1else:breakexcept Exception as e:print(e)passif __name__=="__main__":file=id+".txt"get_userInfo(id)get_weibo(id,file)爬取结果更多关于Python相关内容可查看本站专题:《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Python程序设计有所帮助。
快速学习和使用新浪微博API开发WEB应用
新浪微博API,看起来像一个高深莫测的东西,的确,这也不是一个很简单是的东西。
新浪微博API,当我第一次接触它的时候真的不知所措,感觉得很难入手,而且中间经常出现错误,一般是漏了某些参数造成,就需要浪费大量的时间去调试,在这里要感谢一下我的朋友Randy的帮忙和指导!好了,废话少说,现在直接告诉大家一些我的心得,快速学习和使用新浪API。
第一步:申请新浪微博账号,登陆后在这里/apps创建一个应用,里面的信息暂时可以乱填写(应用开发完成了再回来修改)。
创建后系统会分配一个App Key和App Secret,这两个是验证开发者的身份,必不可少(在下一步下载的SDK 源码里会有作者的,应该还可以正常使用,建议替换成你的。
)第二步:下载SDK源码,我是使用C#的,所以下载的是/wiki/index.php/SDK#C.23选择第二个或者/p/opensinaapi/。
下载完解压后,就可以直接使用VS打开。
第三步:SDK源码主要文件oAuthBase.cs 、oAuthSina.cs、 ISinaApiService.cs 、SinaApiService.cs四个文件。
上一步提到的两个KEY就在oAuthSina.cs文件第31行,直接替换即可。
那再看SinaApiService.cs文件,第63行user_timeline方法。
view plaincopy to clipboardprint?1./*用户发表微薄列表*/2.public string user_timeline(string userid, string passwd, string format)3.{4. oAuthSina _oauth = new oAuthSina();5. if (oAuth(userid, passwd, _oauth))6. {7. string url = "/statuses/user_timeline." +format;8. return _oauth.oAuthWebRequest(oAuthSina.Method.GET, url, String.Empty);9. }10. else11. return null;12.}1. /*用户发表微薄列表*/2.public string user_timeline(oAuthSina oauth, string format)3.{4. string url = "/statuses/user_timeline." + format;5. return oauth.oAuthWebRequest(oAuthSina.Method.GET, url, String.Empty);6.}1.<%2. oAuthSina oauth = new oAuthSina();3. string authLink = oauth.AuthorizationSinaGet() + "&oauth_callback=http://localhost:2122/SinaApiCallBack.ashx";4. Session["Sina_oAuth"] = oauth; //保存到Session以便于后台调用5.%>6.<div>7. <a href="<%=authLink %>">登陆到新浪微博</a>8.</div>1.context.Response.ContentType = "text/plain";2.context.Response.Write("Hello World");3.string oauth_token = context.Request["oauth_token"];4.string oauth_verifier = context.Request["oauth_verifier"];5.if (context.Session["Sina_oAuth"] != null)6.{7. oAuthSina oauth = (oAuthSina)context.Session["Sina_oAuth"]; //从前台session保存下来的8. oauth.Verifier = oauth_verifier;9. oauth.Token = oauth_token;10. oauth.AccessTokenGet(oauth_token);11. SinaApiService sina = new SinaApiService();12. string user = er_timeline(oauth, "xml"); //以上几行代码暂时不需要知道是什么,但必不可少,照写就行了13. context.Response.Write(user); //输出新浪API返回的XML文档内容14.}有什么问题或建议大家可以一起讨论和研究。
新浪微博API
thunder://QUFodHRwOi8vczg1LmZyZWUtZHZkOS5jb20vaGQtZHZkL2R2ZDktMjAwOTE xMjUwNC5yYXJaWg==API文档出自新浪微博API跳转到:导航, 搜索目录隐藏•1微博基础数据接口(Rest API)o 1.1获取下行数据集(timeline)接口o 1.2微博访问接口o 1.3用户接口o 1.4私信接口o 1.5关注接口o 1.6Social Graph接口o 1.7账号接口o 1.8收藏接口o 1.9表情接口o 1.10登录/OAuth接口•2微博搜索API (Search API)o 2.1用户搜索o 2.2微博搜索•3微博地理位置信息API (Location API)o 3.1地理信息搜索接口o 3.2坐标获取接口•4测试接口•5附录o 5.1Rest API字段说明o 5.2地理信息字段说明微博基础数据接口(Rest API)获取下行数据集(timeline)接口•statuses/public_timeline获取最新更新的公共微博消息•statuses/friends_timeline获取当前用户所关注用户的最新微博信息(别名: statuses/home_timeline)•statuses/user_timeline获取用户发布的微博信息列表•statuses/mentions获取@当前用户的微博列表•statuses/comments_timeline获取当前用户发送及收到的评论列表•statuses/comments_by_me获取当前用户发出的评论•statuses/comments获取指定微博的评论列表•statuses/counts批量获取一组微博的评论数及转发数•statuses/unread获取当前用户未读消息数微博访问接口•statuses/show根据ID获取单条微博信息内容•user/statuses/id根据微博ID和用户ID跳转到单条微博页面•statuses/update发布一条微博信息•statuses/upload上传图片并发布一条微博信息•statuses/destroy删除一条微博信息•statuses/repost转发一条微博信息(可加评论)•statuses/comment对一条微博信息进行评论•statuses/comment_destroy删除当前用户的微博评论信息•statuses/reply回复微博评论信息用户接口•users/show根据用户ID获取用户资料(授权用户)•statuses/friends获取当前用户关注对象列表及最新一条微博信息•statuses/followers获取当前用户粉丝列表及最新一条微博信息私信接口•direct_messages获取当前用户最新私信列表•direct_messages/sent获取当前用户发送的最新私信列表•direct_messages/new发送一条私信•direct_messages/destroy删除一条私信关注接口•friendships/create关注某用户•friendships/destroy取消关注•friendships/exists是否关注某用户(推荐使用friendships/show)•friendships/show获取两个用户关系的详细情况Social Graph接口•friends/ids 获取用户关注对象uid列表•followers/ids 获取用户粉丝对象uid列表账号接口•account/verify_credentials验证当前用户身份是否合法•account/rate_limit_status获取当前用户API访问频率限制•account/end_session当前用户退出登录•account/update_profile_image更改头像•account/update_profile更改资料•account/register注册新浪微博帐号•Account/activate二次注册微博的接口收藏接口•favorites获取当前用户的收藏列表•favorites/create添加收藏•favorites/destroy删除当前用户收藏的微博信息表情接口•emotions表情接口,获取表情列表登录/OAuth接口•oauth OAuth授权方式介绍•oauth/request_token获取未授权的Request Token•oauth/authorize请求用户授权Token•oauth/access_token获取授权过的Access Token微博搜索API (Search API)Search API仅对新浪合作开发者开放,申请请联系@微博开放平台用户搜索•users/search搜索微博用户(仅对新浪合作开发者开放)微博搜索•search搜索微博文章(仅对新浪合作开发者开放)•statuses/search搜索微博(多条件组合) (仅对合作开发者开放) 微博地理位置信息API (Location API)Map API仅对新浪合作开发者开放,有任何问题,请联系@地理信息开放平台地理信息搜索接口•Location/route驾车路线搜索接口•Location/bus公交换乘路线搜索接口坐标获取接口•Location/ip2xy获取ip对应坐标的接口•Location/addr2xy获取地址对应坐标的接口•Location/get_addr获取坐标的地址信息的接口测试接口•Help/test测试接口附录Rest API字段说明•status微博信息内容•user用户资料信息•comment评论信息描述•direct_message私信信息•省份城市编码表地理信息字段说明•Location/citycode城市代码对应表•Location/citycode_bus公交城市代码表•Location/category分类代码对应表取自"/wiki/index.php/API%E6%96%87%E6%A1%A3" 搜索平台介绍•文档首页•平台概述•应用开发者协议•开发指南•应用审核规范•成功案例开发文档•API文档•授权机制说明•接口访问权限说明•连接微博•微博组件资源下载•SDK•微博标识下载常见问题•开发过程常见问题•名词解释•常见错误代码及释义工具箱•链入页面•链出更改•特殊页面•可打印版•永久链接关于微博开放平台|联系我们|@微博开放平台|微博挂件|服务条款|新浪微博Copyright © 1996-2010 SINA Corporation, All Rights Reserved。
java实现的新浪微博分享代码实例
java实现的新浪微博分享代码实例java实现的新浪微博分享代码实例这篇文章主要介绍了java实现的新浪微博分享代码实例,是通过新浪API获得授权,然后接受客户端请求的数据,第三方应用发送请求消息到微博,唤起微博分享界面,非常的实用,有相同需要的小伙伴可以参考下。
weibo.java复制代码代码如下:@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(er_center);//创建微博实例mWeiboAuth=newWeiboAuth(this,Constants.APP_KEY,Constants.REDIRECT_URL,Constants.SCOPE);//创建微博分享接口实例mWeiboShareAPI=WeiboShareSDK.createWeiboAPI(this,Co nstants.APP_KEY);//当Activity被重新初始化时(该Activity处于后台时,可能会由于内存不足被杀掉了),//需要调用{@linkIWeiboShareAPI#handleWeiboResponse}来接收微博客户端返回的数据。
//执行成功,返回true,并调用{@linkIWeiboHandler.Response#onResponse};//失败返回false,不调用上述回调if(savedInstanceState!=null){mWeiboShareAPI.handleWeiboResponse(getIntent(),this);}}/检查用户是否安装新浪微博/publicvoidisNotInstall(){try{//检查微博客户端环境是否正常,如果未安装微博,弹出对话框询问用户下载微博客户端if(mWeiboShareAPI.checkEnvironment(true)){//注册第三方应用到微博客户端中,注册成功后该应用将显示在微博的应用列表中。
C调用新浪微博API生成
c#调用资源文件:C#调用新浪微博API生成RSS资源文件疯狂代码 / ĵ:http://BlogDigest/Article79069.htmlC#新浪微博API生成RSS资源文件作者:点滴Beer 个人主页:新浪微博现在好像势头很猛很多人在创立自己微博客时候开始出于好奇都会跟随很多人久而久的自己好友人数超过100后那么你就发现你已经完全淹没在信息洪流中了你跟随了那么多人很多人都是今后可能永远都不会想起也永远也不会看到人这显然和“关注”目是相背更有时候可能你只是想看下你认识人消息更新了没有但是显然你不可能每次都个个到自己关注人物表中点开然后再访问他主页这样操作太繁琐了用过RSS阅读器用户可能都体会到RSS阅读器在获取信息优越性了吧它能实时跟踪RSS资源更新并显示更新数目到指定订阅资源后面可以让用户有针对性地查看信息让用户主动地去获取信息而不再是被动地接受信息了这对于解决微博“信息洪流”问题是很有效笔者花费了几天时间终于写了个用于获取指定用户好友并存储备份到ACCESS数据库中然后生成个RSS阅读资源不敢独享所以开源和大家分享今后如果有时间我想再将它做成个桌面软件Software方便般不懂用户来操作这都是后话了吧1. 新浪微博RSS订阅第 3方网站WebSite新浪微博本身没有提供RSS订阅但是到网上搜索发现了个第 3方网站WebSite提供新浪微博RSS资源所以本文RSS订阅说白了都是基于这个第 3方网站WebSite/item/2010/02/sina-bo-rss-subscribe-feed-generate-micro/2. 网上通用OPML文件XML格式下面是从Google Reader中导出opml文件这是网络RSS阅读器甚至所有RSS阅读器标准格式吧至少“鲜果”“有道”这些比较流行在线阅读器都支持这个格式文件导入<?xml version="1.0" encoding="UTF-8"?><opml version="1.0"><head><title>subscriptions</ title><dateCreated>2010-05-16 15:45:03</dateCreated><ownerName></ownerName></head>< body><outline text="微博客" title="微博客"><outline text="冷笑话(1567852087)" title="冷笑话(1567852087)" type="rss"htmlUrl="/1567852087" xmlUrl="/SinaRss.aspx?uid=1567852087" /><outline text="后宫优雅(1665289110)" title="后宫优雅(1665289110)" type="rss"htmlUrl="/1665289110" xmlUrl="/SinaRss.aspx?uid=1665289110" /><outline text="围脖经典语录" title="围脖经典语录" type="rss"htmlUrl="/1646465281" xmlUrl="/SinaRss.aspx?uid=1646465281" /><outline text="破阵子(1644022141)" title="破阵子(1644022141)" type="rss"htmlUrl="/1644022141" xmlUrl="/SinaRss.aspx?uid=1644022141" /></outline><outline text="珞珈山水" title="珞珈山水"><outline text="今日十大热门话题" title="今日十大热门话题" type="rss"htmlUrl="/frames.html" xmlUrl="/rssi.php?h=1" /><outline text= "贴图版" title="贴图版" type="rss"htmlUrl="/wForum/board.php?name=Picture" xmlUrl="/wForum/rss.php?board=Picture&ic=1" /></outline></body></opml> ;分析OPML文件架构然后方便通过来将它需要信息写成此架构文件便于阅读器引用 OPML文件由头部标签<head>(主要是本文件些注释不影响实际RSS订阅信息不是太重要)和<body>(RSS阅读器提取订阅资源全部数据来源)在<body>节点下面有个级<outline>节点这个节点对应RSS阅读器中地RSS资源分类文件夹相关信息(显然text表示就是文件夹名称)然后级<outline>下面就是 2级<outline>标签对这里面就是RSS资源相关数据内容了 2级<outline>中节点些重要属性:text表示资源标题htmlUrl表示是信息Web网页地址xmlUrl表示是信息RSS订阅地址3. 新浪微博API――从服务器上导出用户好友数据到本地XML文件有关新浪微博API详细介绍可以参考新浪微博API官方网站WebSite:/wiki/index.php/首页有关身份认证和数据请求请参考cnblogs:.NET新浪微博开放平台接口代码举例/cmt/archive/2010/05/13/1733904.html下面是自己整理代码,从服务器上请求用户好友信息:private void getFriends { previous_cursor=-1; next_cursor = -1; while (next_cursor != 0) { cursor = Convert.(previous_cursor); url = "/statuses/friends.xml?source=AppKey&cursor=" + cursor; username = " dreamzsm@"; password = name; //这里输入你自己微博登录密码 //注意这里格式哦为 "username:password" .Net.WebRequest webRequest = .Net.WebRequest.Create(url);.Net.HttpWebRequest myReq = webRequest as .Net.HttpWebRequest; //身份验证 usernamePassword = username + ":" + password; CredentialCache mycache = CredentialCache; mycache.Add( Uri(url), "Basic", NetworkCredential(username, password)); myReq.Credentials = mycache; myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(ASCIIEncoding.GetBytes(usernamePassword))); WebResponse wr = myReq.GetResponse; Stream receiveStream = wr.GetResponseStream; StreamReader reader = StreamReader(receiveStream, Encoding.UTF8); content = reader.ReadToEnd; XmlDocument xmlDoc = XmlDocument;xmlDoc.LoadXml(content); // xmlDoc.Load("data1.xml"); XmlNodeList nodeList =xmlDoc.SelectSingleNode("users").ChildNodes;//获取根节点所有子节点 next_cursor =Convert.ToInt16(nodeList.Item(nodeList.Count - 2).InnerText); previous_cursor =Convert.ToInt16(nodeList.Item(nodeList.Count-1).InnerText); xmlName = "friends_" +nodeList.Item(nodeList.Count - 1).InnerText + "_" + Convert.ToInt16(nodeList.Item(nodeList.Count -2).InnerText) + ".xml"; previous_cursor = next_cursor; xmlDoc.Save(xmlName); } };为了设计简单点笔者就有点偷懒了没有仔细研究如何将所有数据写到个XML文件中而是每次请求得到20条数据写成个XML文件最后我159个好友按照指定命名思路方法生成了8个XML文件如此就得到了所有你好友(就是你跟随人)信息了以单人为例其主要信息如下:<user> <id>1710993410</id> <screen_name>某丫大人</screen_name> <name>某丫大人</name> <province>43</province> <city>1</city> <location>湖南 长沙</location> < description>饭否儿心朝饭否春暖花开 我还是@饿YA 我还真是懒得介绍了</description> <url>http://1 </url> <profile_image_url>/1710993410/50/1273755892</profile_image_url> <do> </do> <gender>f</gender> <followers_count>168</followers_count> <friends_count>79</friends_count> <statuses_count>846</statuses_count> <favourites_count>0</ favourites_count> <created_at>Sun Mar 14 00:00:00 +0800 2010</created_at> <following>false </following> <veried>false</veried> <allow_all_act_msg>false</allow_all_act_msg> <geo_enabled>false</geo_enabled> <status> <created_at>Sun May 16 21:02:44 +0800 2010</ created_at> <id>364379114</id> <text>烦死了快、</text> <source> <a href="">新浪微博</a> </source> <favorited>false</favorited> <truncated>false</truncated> <geo /> <in_reply_to_status_id> </in_reply_to_status_id> <in_reply_to_user_id> </in_reply_to_user_id> <in_reply_to_screen_name> </in_reply_to_screen_name> </status> </ user>;可以看到这里面信息量是超级多我简单介绍下几个主要节点吧id用户新浪微博数字ID就像你QQ号样name用户昵称province省代号city市代号location所在省市(好像和上面两个节点重复了)description自我描述do域名就是除了数字ID后用户申请修改域名 gender性别男是Male,女是Female.followers_count粉丝数friends_count跟随人数statuses_count发表状态也就是微博数favourites_count收藏微博数目吧?(不知道这个有什么用)created_at用户创建此微博客时间veried是否经过新浪VIP认证status用户最近次状态除了user信息外还有些其它信息比如根节点下next_cursor和previous_cousor这方便用户分多次到服务器上请求数据时可以此作为定位依据<next_cursor>20</next_cursor><previous_cursor>0</previous_cursor>4. 将XML文件存储到ACCESS数据库中进行备份如果不想备份可以直接从第3步中到第5步但是笔者觉得将数据转换成此构架后更加方便后来操作以及浏览数据有关XML详细思路方法参考:小气鬼在C#.net中如何操作XML/weekzero/archive/2005/06/21/178140.html下面开始读取刚才从新浪微博服务器上请求得到XML文件了然后转换成ACCESS数据库内容(当然你要先用ACCESS在指定目录下建立个*.mdb文件用来存储数据)下面是对单个XML文件进行读取并插入到数据库中(这段代码是在中写)public void readTsinaFriends( fileName) { XmlDocument xmlDoc = XmlDocument;xmlDoc.Load(Server.MapPath(fileName)); XmlNodeList nodeList = xmlDoc.SelectSingleNode("users ").ChildNodes;//获取 根节点所有子节点 ; //删除不用级节点比如提示人数所在位置标记 XmlNode root = xmlDoc.SelectSingleNode("users"); // XmlNodeList xnl =xmlDoc.SelectSingleNode("Employees").ChildNodes; for ( k = 0; k < nodeList.Count; k) { XmlElement xe = (XmlElement)nodeList.Item(k); ("user") {//去掉XML文件中不需要节点:next_cursor,previous_coursor以及user节点中status方便XML直接转换成DataTableXmlNodeList nodeList1 = xmlDoc.SelectNodes("users/user");//得到所有标签user级节点 foreach (XmlNode xmlNodeTemp in nodeList1) { ( "status")//移除每个user节点中"status"子节点--(般情况下此节点都放在最后个所以就不遍历了直接地址定位) { xmlNodeTemp.RemoveChild(stChild); } } } ( "next_cursor" || "previous_cursor") { root.RemoveChild(xe); (k < nodeList.Count) k = k - 1; } } tbxml = xmlDoc.OuterXml; DataTable dt = DataTable; DataSet ds = DataSet; .IO.StringReader reader =.IO.StringReader(tbxml); ds.ReadXml(reader); dt = ds.Tables[0];//如果XML文本中有同名父子节点那么此语句就会多读出条数据这可能是此API局限性吧 DataTable dtCopy = dt.Copy;//dtCopy.Columns.Remove("url"); //dtCopy.Columns.Remove("profile_image_url");dtCopy.Columns.Remove("description"); //这个字段里面编码不太规则在插入ACCESS时候总有问题而且用处不大所以就去除了(又偷懒了呃) DataRow drTemp = dtCopy.NewRow; strInsert = .Empty; OleDbConnection aConnection = OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:\\coursware\\网络软文\\API_微波\\weibo.mdb"); aConnection.Open; for ( i = 0; i <dtCopy.Rows.Count - 1; i) { drTemp = dtCopy.Rows[i]; strInsert = "'"+drTemp[0].+"','"; for ( j = 1; j <dtCopy.Columns.Count - 1; j) { strInsert (drTemp[j]. + "','"); } strInsert drTemp[dtCopy.Columns.Count - 1]. + "'"; strCmd = "INSERT INTO Friends VALUES(" + strInsert + ")"; OleDbCommand command = OleDbCommand(strCmd, aConnection); command.ExecuteNonQuery; } aConnection.Close; };对多个XML文件进行遍历个个导入到ACCESS数据库中:/// <summary> /// 将所有好友都导出了然后存储在ACCESS数据库中了 /// </summary> public void readAllXml { for ( i = 0; i < 8; i) { fileName = "friends_" + Convert.(i * 20) + "_" +Convert.(i*20+20)+".xml";//按照存储XML文件时命名规则进行读取 readTsinaFriends(fileName); } };经过上面操作后你再打开你ACCESS数据库文件weibo.mdb文件中对应表就可以看到所以信息都已经导入到ACCESS中了如下图所示:5. 对ACCESS数据库查询并写成RSS阅读器OPML格式对于制作RSS阅读器OPML格式需要数据只有两条字段:个是id字段个是name字段这个过程实际上就是对数据进行XML编码过程啥都不说了切都在代码中了(也是在工程中写):/// <summary> /// 建立新浪微博RSS文件 /// </summary> public void CreateTsinaRssXmlFile { OleDbConnection aConnection = OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:\\coursware\\网络软文\\API_微波\\weibo.mdb"); strCmd = "select id asidnum,screen_name as name from Friends"; //从ACCESS中获取数据 aConnection.Open; OleDbDataAdapter da = OleDbDataAdapter(strCmd, aConnection); DataSet ds = DataSet; da.Fill(ds, "TSina"); ds.DataSetName = "RssReader"; DataTable dt = ds.Tables[0];//数据集第0张表格XmlDocument xmldoc; XmlElement xmlelem; xmldoc = XmlDocument; //加入XML声明段落XmlDeclaration xmldecl; xmldecl = xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null);xmldoc.AppendChild(xmldecl); //加入个根元素 xmlelem = xmldoc.CreateElement(" ;", "opml", " ; "); xmldoc.AppendChild(xmlelem); XmlNode root = xmldoc.SelectSingleNode("opml");//查找<opml>节点 XmlElement xeHead = xmldoc.CreateElement("head");//创建个<head>节点 //为head节点增加子节点 XmlElement xeHeadsub = xmldoc.CreateElement("title"); xeHeadsub.InnerText = "Rss Reader";//设置节点文本 xeHead.AppendChild(xeHeadsub);//添加到<head>子节点中root.AppendChild(xeHead);//添加到<head>节点中 //增加body子节点然后将所有RSS订阅信息全部写入到body节点中间 XmlElement xeBody = xmldoc.CreateElement("body");root.AppendChild(xeBody); //第层循环是标签(文件夹循环)由于本次只做个标签所以就只循环次了 //RSS文件夹属性节点 XmlElement xe1 = xmldoc.CreateElement("outline"); xe1.SetAttribute("text", "Tsina"); //设置该节点title属性 xe1.SetAttribute("title", "Tsina");//设置该节点title属性 --第层outline节点属性表示是RSS标签或者说是文件夹 //下面就要开始为此文件夹节点添加下属子节点也就是添加些实质RSS地址了strTitle = .Empty; strText = .Empty; strXmlUrl = .Empty; strHtmlUrl = .Empty; for ( i = 0; i <dt.Rows.Count; i) { strTitle = dt.Rows[i]["NAME"]..Trim; strText = strTitle; strXmlUrl = "/SinaRss.aspx?uid=" + dt.Rows[i]["IDNum"]..Trim; strHtmlUrl = "/ " + dt.Rows[i]["IDNum"]..Trim; XmlElement xesub1 = xmldoc.CreateElement("outline");xesub1.SetAttribute("text", strText);//设置该节点title属性 xesub1.SetAttribute("title", strTitle);//设置该节点title属性 --第层outline节点属性表示是RSS标签或者说是文件夹 xesub1.SetAttribute(" type", "rss"); xesub1.SetAttribute("xmlUrl", strXmlUrl); xesub1.SetAttribute("htmlUrl", strHtmlUrl);xe1.AppendChild(xesub1);//添加到<Node>节点中 } xeBody.AppendChild(xe1); //保存创建好XML文档 xmldoc.Save(Server.MapPath("RssReader.xml")); };最后在指定目录下就自动生成了个RssReader.xml文件了大功告成了!然后将此文件就可以导入到任何个RSS阅读器中了用户就能够通过RSS阅读器来获取微博信息了而且现在RSS阅读器都有个键转贴到微博功能很方便不想转到自己微博也可以通过RSS阅读器直接收藏到阅读器中辛苦了两天今天能有这么点小成果还是觉得很不错呵呵也祝大家也能好运本次代码比较还需要各种完善比如如何将所以数据写成个XML文件这个笔者就暂时不做了留给大家去做吧Rss阅读器效果图如下:后记:新浪微博开放了API从此新浪微博可玩性就变强了很多了写下本文主要是为了抛砖引玉其实还有很多其它功能笔者想实现但现在毕业在即还要忙毕业设计所以希望大家可以试试比如利用API来备份用户发微博等等最后也写上本人微博地址吧如果有何指教请留言:/fly4u-----------------------------------------------Author:点滴BeerEmail /Gtalk:dreamzsm@From:/beerNotes:欢迎转贴但请在页面中加个链接注明出处就当是对作者点小鼓励吧^_^Time:2010-5-17作者:点滴Beer出处:/beer/本文版权归作者和博客园共有欢迎转载但未经作者同意必须保留此段声明且在文章页面明显位置给出原文连接请尊重作者劳动成果Tag标签: 新浪微博,API,ACCESS,XML2010-5-18 11:09:39疯狂代码 /。
Xweibo微博API接口说明
Xweibo微博API接口说明Xweibo2011年6月目录目录1接口概述 (1)2API调用说明 (1)2.1参数说明: (1)2.2Api访问方式说明: (1)3API返回值说明 (2)3.1返回格式:json (2)3.2返回结构:{"rst":返回结果,"errno":结果代码,"err":"错误提示信息"} (2)4错误代码 (2)4.1参数检查错误代码: (2)4.2平台级别错误代码: (3)5接口介绍 (3)5.1微博访问接口 (3)5.1.1action.update:发布一条微博消息 (3)5.1.2action.destroy:删除一条微博信息 (4)5.1.3action.repost:转发一条微博信息 (5)ment:对一条微博信息进行评论 (6)ment.destroy:删除微博评论 (6)5.1.6action.reply:回复微博评论消息 (7)5.2关注接口 (9)5.2.1action.createFriendship:关注某用户 (9)5.2.2action.deleteFriendship:取消关注或移除粉丝 (10)5.2.3action.friendship:查看某人是否为指定用户的粉丝 (10)5.3收藏接口 (11)5.3.1action.createFavorite:添加收藏 (11)5.3.2action.deleteFavorite:删除收藏 (11)5.4账号接口 (12)5.4.1action.updateProfileImage:更改头像 (12)5.4.2action.saveProfile:更改个人资料 (12)5.5获取下行数据集(Timeline)接口 (13)5.5.1action.unread:获取当前用户未读消息数 (13)5.5.2action.getComments:获取指定微博的评论列表 (13)5.5.3action.getCounts:批量获取评论数和转发数 (116)5.5.4action.clearTip:未读消息数清零接口 (116)5.6私信接口 (16)5.6.1action.sendDirectMessage:发送私信 (16)5.6.2action.deleteDirectMessage:删除私信 (16)5.7用户接口 (17)5.7.1action.createBlocks:加入黑名单 (17)5.7.2action.deleteBlocks:删除黑名单 (17)5.7.3action.createTags:添加标签 (18)5.7.4action.deleteTags:删除标签 (18)5.8其它接口 (19)5.8.1action.setting:tip个人设置 (19)5.8.2action.sinaurl:解析短链接 (19)5.8.4action.saveNotice:更新提醒设置和tip显示方式 (21)Xweibo微博API接口说明1 接口概述Xweibo不仅提供了快速、低成本架设微博的解决方案,还提供了让第三方调用的API接口。
新浪微博API
新浪微博API新浪微博API(android版)============================本版本在java版的基础上修改,使其可以在android sdk上使用.新增加了android的OAuth登陆认证及获取好友微博的实现样例.常用接口实例:(使用前先修改 Weibo.java 中public static final String CONSUMER_KEY = "";public static final String CONSUMER_SECRET = "";填写成实际申请的 CONSUMER_KEY 及 CONSUMER_SECRET)1、获取最新公共微博列表参考:weibo4j.examples.GetTimelines 中的getPublicTimeline()部分2、发表微博参考:weibo4j.examples.Update 中的updateStatus(...)部分3、发表评论参考:weibo4j.examples.Update 中的updateComment(...)部分4、删除评论参考:weibo4j.examples.Update 中的destroyComment(...)部分5、发送私人消息参考:weibo4j.examples.DirectMessage 类6、发表带图片的微博参考:weibo4j.examples.OAuthUploadByFile 中的uploadStatus(status,file)部分7、更新用户头像参考:weibo4j.examples.OAuthUpdateProfile类8、OAuth登陆认证参考: andriodexamples 的demo.====================================== ======================================= 其他接口在weibo4j.Weibo类中定义,调用方式请参考weibo4j.examples,下面是完整的接口列表:获取下行数据集(timeline)接口方法名:statuses/public_timeline 最新公共微博方法名:getPublicTimelinestatuses/friends_timeline 最新关注人微博(别名: statuses/home_timeline) 方法名:getFriendsTimeline statuses/user_timeline 用户发表微博列表方法名:getUserTimeline(String id, Paging paging)statuses/mentions 最新 @用户的方法名: getMentions()statuses/comments 单条评论列表(按微博) 方法名:getComments()微博访问接口statuses/show 获取单条方法名:showStatus(long id)statuses/update 发表微博方法名:updateStatus(String status) statuses/upload 发表微博及图片方法名:uploadStatus(String status,File file)statuses/destroy 删除方法名: destroyStatus(long statusId)statuses/comment 评论方法名:destroyComment(long commentId)statuses/comment_destroy 删除评论方法名:destroyComment私信接口direct_messages 我的私信列表方法名:getDirectMessages() 分页 getDirectMessages(Paging paging)direct_messages/sent 我发送的私信列表方法名:getSentDirectMessages()direct_messages/new 发送私信方法名:sendDirectMessage(String id,String text)direct_messages/destroy 删除一条私信方法名:destroyDirectMessage(int id)关注接口friendships/create 关注某用户方法名:createFriendship(String id)或 createFriendship(String id, boolean follow)friendships/destroy 取消关注方法名:destroyFriendship(String id)friendships/exists 是否关注某用户方法名:existsFriendship(String userA, String userB)friends/ids关注列表方法名: getFriendsIDs(long cursor)followers/ids 粉丝列表方法名:getFollowersIDs(long cursor) 账号接口account/verify_credentials 验证身份是否合法方法名:verifyCredentials()account/rate_limit_status 查看当前频率限制方法名:rateLimitStatus()account/update_profile_image 更改头像方法名:updateProfileImage(File image)account/update_profile 更改资料方法名:User updateProfile(String name, String email, String url, String location, String description)收藏接口favorites 收藏列表方法名:getFavorites()favorites/create 添加收藏方法名:createFavorite(long id)favorites/destroy 删除收藏方法名:destroyFavorite(long id)。
最简单的C#调用新浪微博代码
Response.Write(content);
3.获取微博数、粉丝数信息
public stringjson= "[{\"id\":0,\"followers_count\":0,\"friends_count\":0,\"statuses_count\":0,\"private_friends_count\":0}]"; //全局变量
}
#endregion
#region --判断字符串都是数字
public staticboolIsNumber(stringstr)
{
for (inti= 0;i<str.Length;i++)
{
if (!Char.IsNumber(str,i))
return false;
}
return true;
.WebResponsewebresponse=httpRequest.GetResponse();
System.IO.StreamreceiveStream=webresponse.GetResponseStream();
System.IO.StreamReaderreader = newSystem.IO.StreamReader(receiveStream, System.Text.Encoding.UTF8);
//发起POST请求:
httpRequest.Method= "POST";
httpRequest.ContentType= "application/x-www-form-urlencoded";
C#实现新浪微博群发器
通过新浪微博api群发微博,使用了sina提供的sdk,并对其进行小改,跳过了oauth 页面认证。
这个sdk用起来挺方便的。
下面介绍实现方法,给有这方面需要的一个参考。
由于跳过了oauth页面认证,需要发送一次用户密码,不够安全,大家应该酌情使用。
我小改的sdk下载地址,将下载下来的文件夹复制到项目中:/fmnisme/sinaApi.rarsina官方文档中心:/wiki/index.php/%E9%A6%96%E9%A1%B5绕过oauth页面认证的方法使用了博客园akita 的方法,在此感谢,关于该方法的博客:/btxakita/archive/2011/05/24/2055767.htmlskd使用方法:首先修改SDK中GlobalInfo类的appkey,appSecret为你在sina申请到的appKey,appSecret;var httpRequest = HttpRequestFactory.CreateHttpRequest(Method.GET) as HttpGet;//因为群发博客,所以用数组存放了用户信息,x代表数组下标。
httpRequest.GetRequestToken();string url = httpRequest.GetAuthorizationUrl();GlobalInfo.requestTokens[x] = httpRequest.Token;GlobalInfo.requesTokenSecrets[x] =httpRequest.TokenSecret;httpRequest.GetVerifier(“用户名[x]”,“密码[x]”x); httpRequest.GetAccessToken();GlobalInfo.requestTokens[x] = httpRequest.Token;GlobalInfo.requesTokenSecrets[x] =httpRequest.TokenSecret;var sendUrl ="/statuses/update.xml?";httpRequest2.Request(sendUrl, "status=" +HttpUtility.UrlEncode(“微博内容”));下面贴出代码:using:using System;using System.Collections.Generic;using System.Windows.Forms;using System.IO;using LeoShi.Soft.OpenSinaAPI;using System.Web;using System.Threading;读取配置文件并获取相应的accessToken,配置文件的格式为:username&password,每个这样的占一行,使用记事本写就行了。
新浪微博应用开发的一个解决方案
新浪微博应用开发的一个简易方案PHP+新浪微博开放平台+新浪云平台(SAE)贺利坚2012.2.25目 录一、必须交待的几个问题 (1)二、PHP+新浪微博开放平台+新浪云平台(SAE)方案的基础 (2)三、建立微博应用的过程 (4)四、PHP SDK中Demo程序简析 (18)五、进一步学习的走向和有用的资源 (27)附录1:新浪微博旧版API中的PHP例程 (29)附录2:新浪微博开放平台WeiboClient类的公共方法 (59)一、必须交待的几个问题这是一个不严肃的册子,主要因为:(1)作者不精通PHP,对PHP涉及的内容早有了解,但没有专门学习,之前更没有做过程序。
在决定试着体验用PHP开发微博应用后,也仅用半个上午的时间,浏览了PHP的一般语法;(2)这本册子是匆忙完成的,学习时间一天半,写作时间一天。
主要是因为并不打算在此方面深入做下去,也没有那么多的时间;(3)册子中除了作者自写的文字,其他材料全部来自新浪微博开放平台(/)和新浪云平台(/),有拼凑之嫌。
但是,这是一本很实用的册子,起码作者这样认为。
以作者飞速的学习进度,有力地说明这是快速了解微博应用开发的最好材料,给出的解决方案也是最适合初学者构建微博应用开发的。
一旦能够在浏览器中看到自己的代码操纵着微博中的信息,微博应用开发中不少概念将生动起来,再进一步做一些工作将不再那样艰苦。
尽管不严肃,还是决定写出来。
针对零基础的开发者,现在还没有一个适合的资料。
我的贡献在于为刚起步开发的读者整理出了个头绪,提出了一种最简便的学习方案。
从初学者的角度,凭着自己尚热乎的初学者感觉,帮其他初学者一把。
因为不精通,很多相应平台上能说清楚的事情,直接给出链接,而不再多言。
平台上的文字有些太多,初学者没看几个字,就被绕糊涂了。
我的贡献是指出看这些庞杂文档的一个建议,并尽量引导读者动手做,早些找到感觉。
所以,这本小册子仅是在微博应用开发上帮助读者起步的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c#调用资源文件:C#调用新浪微博API生成RSS资源文件疯狂代码 / ĵ:http://BlogDigest/Article79069.htmlC#新浪微博API生成RSS资源文件作者:点滴Beer 个人主页:新浪微博现在好像势头很猛很多人在创立自己微博客时候开始出于好奇都会跟随很多人久而久的自己好友人数超过100后那么你就发现你已经完全淹没在信息洪流中了你跟随了那么多人很多人都是今后可能永远都不会想起也永远也不会看到人这显然和“关注”目是相背更有时候可能你只是想看下你认识人消息更新了没有但是显然你不可能每次都个个到自己关注人物表中点开然后再访问他主页这样操作太繁琐了用过RSS阅读器用户可能都体会到RSS阅读器在获取信息优越性了吧它能实时跟踪RSS资源更新并显示更新数目到指定订阅资源后面可以让用户有针对性地查看信息让用户主动地去获取信息而不再是被动地接受信息了这对于解决微博“信息洪流”问题是很有效笔者花费了几天时间终于写了个用于获取指定用户好友并存储备份到ACCESS数据库中然后生成个RSS阅读资源不敢独享所以开源和大家分享今后如果有时间我想再将它做成个桌面软件Software方便般不懂用户来操作这都是后话了吧1. 新浪微博RSS订阅第 3方网站WebSite新浪微博本身没有提供RSS订阅但是到网上搜索发现了个第 3方网站WebSite提供新浪微博RSS资源所以本文RSS订阅说白了都是基于这个第 3方网站WebSite/item/2010/02/sina-bo-rss-subscribe-feed-generate-micro/2. 网上通用OPML文件XML格式下面是从Google Reader中导出opml文件这是网络RSS阅读器甚至所有RSS阅读器标准格式吧至少“鲜果”“有道”这些比较流行在线阅读器都支持这个格式文件导入<?xml version="1.0" encoding="UTF-8"?><opml version="1.0"><head><title>subscriptions</ title><dateCreated>2010-05-16 15:45:03</dateCreated><ownerName></ownerName></head>< body><outline text="微博客" title="微博客"><outline text="冷笑话(1567852087)" title="冷笑话(1567852087)" type="rss"htmlUrl="/1567852087" xmlUrl="/SinaRss.aspx?uid=1567852087" /><outline text="后宫优雅(1665289110)" title="后宫优雅(1665289110)" type="rss"htmlUrl="/1665289110" xmlUrl="/SinaRss.aspx?uid=1665289110" /><outline text="围脖经典语录" title="围脖经典语录" type="rss"htmlUrl="/1646465281" xmlUrl="/SinaRss.aspx?uid=1646465281" /><outline text="破阵子(1644022141)" title="破阵子(1644022141)" type="rss"htmlUrl="/1644022141" xmlUrl="/SinaRss.aspx?uid=1644022141" /></outline><outline text="珞珈山水" title="珞珈山水"><outline text="今日十大热门话题" title="今日十大热门话题" type="rss"htmlUrl="/frames.html" xmlUrl="/rssi.php?h=1" /><outline text= "贴图版" title="贴图版" type="rss"htmlUrl="/wForum/board.php?name=Picture" xmlUrl="/wForum/rss.php?board=Picture&ic=1" /></outline></body></opml> ;分析OPML文件架构然后方便通过来将它需要信息写成此架构文件便于阅读器引用 OPML文件由头部标签<head>(主要是本文件些注释不影响实际RSS订阅信息不是太重要)和<body>(RSS阅读器提取订阅资源全部数据来源)在<body>节点下面有个级<outline>节点这个节点对应RSS阅读器中地RSS资源分类文件夹相关信息(显然text表示就是文件夹名称)然后级<outline>下面就是 2级<outline>标签对这里面就是RSS资源相关数据内容了 2级<outline>中节点些重要属性:text表示资源标题htmlUrl表示是信息Web网页地址xmlUrl表示是信息RSS订阅地址3. 新浪微博API――从服务器上导出用户好友数据到本地XML文件有关新浪微博API详细介绍可以参考新浪微博API官方网站WebSite:/wiki/index.php/首页有关身份认证和数据请求请参考cnblogs:.NET新浪微博开放平台接口代码举例/cmt/archive/2010/05/13/1733904.html下面是自己整理代码,从服务器上请求用户好友信息:private void getFriends { previous_cursor=-1; next_cursor = -1; while (next_cursor != 0) { cursor = Convert.(previous_cursor); url = "/statuses/friends.xml?source=AppKey&cursor=" + cursor; username = " dreamzsm@"; password = name; //这里输入你自己微博登录密码 //注意这里格式哦为 "username:password" .Net.WebRequest webRequest = .Net.WebRequest.Create(url);.Net.HttpWebRequest myReq = webRequest as .Net.HttpWebRequest; //身份验证 usernamePassword = username + ":" + password; CredentialCache mycache = CredentialCache; mycache.Add( Uri(url), "Basic", NetworkCredential(username, password)); myReq.Credentials = mycache; myReq.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(ASCIIEncoding.GetBytes(usernamePassword))); WebResponse wr = myReq.GetResponse; Stream receiveStream = wr.GetResponseStream; StreamReader reader = StreamReader(receiveStream, Encoding.UTF8); content = reader.ReadToEnd; XmlDocument xmlDoc = XmlDocument;xmlDoc.LoadXml(content); // xmlDoc.Load("data1.xml"); XmlNodeList nodeList =xmlDoc.SelectSingleNode("users").ChildNodes;//获取根节点所有子节点 next_cursor =Convert.ToInt16(nodeList.Item(nodeList.Count - 2).InnerText); previous_cursor =Convert.ToInt16(nodeList.Item(nodeList.Count-1).InnerText); xmlName = "friends_" +nodeList.Item(nodeList.Count - 1).InnerText + "_" + Convert.ToInt16(nodeList.Item(nodeList.Count -2).InnerText) + ".xml"; previous_cursor = next_cursor; xmlDoc.Save(xmlName); } };为了设计简单点笔者就有点偷懒了没有仔细研究如何将所有数据写到个XML文件中而是每次请求得到20条数据写成个XML文件最后我159个好友按照指定命名思路方法生成了8个XML文件如此就得到了所有你好友(就是你跟随人)信息了以单人为例其主要信息如下:<user> <id>1710993410</id> <screen_name>某丫大人</screen_name> <name>某丫大人</name> <province>43</province> <city>1</city> <location>湖南 长沙</location> < description>饭否儿心朝饭否春暖花开 我还是@饿YA 我还真是懒得介绍了</description> <url>http://1 </url> <profile_image_url>/1710993410/50/1273755892</profile_image_url> <do> </do> <gender>f</gender> <followers_count>168</followers_count> <friends_count>79</friends_count> <statuses_count>846</statuses_count> <favourites_count>0</ favourites_count> <created_at>Sun Mar 14 00:00:00 +0800 2010</created_at> <following>false </following> <veried>false</veried> <allow_all_act_msg>false</allow_all_act_msg> <geo_enabled>false</geo_enabled> <status> <created_at>Sun May 16 21:02:44 +0800 2010</ created_at> <id>364379114</id> <text>烦死了快、</text> <source> <a href="">新浪微博</a> </source> <favorited>false</favorited> <truncated>false</truncated> <geo /> <in_reply_to_status_id> </in_reply_to_status_id> <in_reply_to_user_id> </in_reply_to_user_id> <in_reply_to_screen_name> </in_reply_to_screen_name> </status> </ user>;可以看到这里面信息量是超级多我简单介绍下几个主要节点吧id用户新浪微博数字ID就像你QQ号样name用户昵称province省代号city市代号location所在省市(好像和上面两个节点重复了)description自我描述do域名就是除了数字ID后用户申请修改域名 gender性别男是Male,女是Female.followers_count粉丝数friends_count跟随人数statuses_count发表状态也就是微博数favourites_count收藏微博数目吧?(不知道这个有什么用)created_at用户创建此微博客时间veried是否经过新浪VIP认证status用户最近次状态除了user信息外还有些其它信息比如根节点下next_cursor和previous_cousor这方便用户分多次到服务器上请求数据时可以此作为定位依据<next_cursor>20</next_cursor><previous_cursor>0</previous_cursor>4. 将XML文件存储到ACCESS数据库中进行备份如果不想备份可以直接从第3步中到第5步但是笔者觉得将数据转换成此构架后更加方便后来操作以及浏览数据有关XML详细思路方法参考:小气鬼在C#.net中如何操作XML/weekzero/archive/2005/06/21/178140.html下面开始读取刚才从新浪微博服务器上请求得到XML文件了然后转换成ACCESS数据库内容(当然你要先用ACCESS在指定目录下建立个*.mdb文件用来存储数据)下面是对单个XML文件进行读取并插入到数据库中(这段代码是在中写)public void readTsinaFriends( fileName) { XmlDocument xmlDoc = XmlDocument;xmlDoc.Load(Server.MapPath(fileName)); XmlNodeList nodeList = xmlDoc.SelectSingleNode("users ").ChildNodes;//获取 根节点所有子节点 ; //删除不用级节点比如提示人数所在位置标记 XmlNode root = xmlDoc.SelectSingleNode("users"); // XmlNodeList xnl =xmlDoc.SelectSingleNode("Employees").ChildNodes; for ( k = 0; k < nodeList.Count; k) { XmlElement xe = (XmlElement)nodeList.Item(k); ("user") {//去掉XML文件中不需要节点:next_cursor,previous_coursor以及user节点中status方便XML直接转换成DataTableXmlNodeList nodeList1 = xmlDoc.SelectNodes("users/user");//得到所有标签user级节点 foreach (XmlNode xmlNodeTemp in nodeList1) { ( "status")//移除每个user节点中"status"子节点--(般情况下此节点都放在最后个所以就不遍历了直接地址定位) { xmlNodeTemp.RemoveChild(stChild); } } } ( "next_cursor" || "previous_cursor") { root.RemoveChild(xe); (k < nodeList.Count) k = k - 1; } } tbxml = xmlDoc.OuterXml; DataTable dt = DataTable; DataSet ds = DataSet; .IO.StringReader reader =.IO.StringReader(tbxml); ds.ReadXml(reader); dt = ds.Tables[0];//如果XML文本中有同名父子节点那么此语句就会多读出条数据这可能是此API局限性吧 DataTable dtCopy = dt.Copy;//dtCopy.Columns.Remove("url"); //dtCopy.Columns.Remove("profile_image_url");dtCopy.Columns.Remove("description"); //这个字段里面编码不太规则在插入ACCESS时候总有问题而且用处不大所以就去除了(又偷懒了呃) DataRow drTemp = dtCopy.NewRow; strInsert = .Empty; OleDbConnection aConnection = OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:\\coursware\\网络软文\\API_微波\\weibo.mdb"); aConnection.Open; for ( i = 0; i <dtCopy.Rows.Count - 1; i) { drTemp = dtCopy.Rows[i]; strInsert = "'"+drTemp[0].+"','"; for ( j = 1; j <dtCopy.Columns.Count - 1; j) { strInsert (drTemp[j]. + "','"); } strInsert drTemp[dtCopy.Columns.Count - 1]. + "'"; strCmd = "INSERT INTO Friends VALUES(" + strInsert + ")"; OleDbCommand command = OleDbCommand(strCmd, aConnection); command.ExecuteNonQuery; } aConnection.Close; };对多个XML文件进行遍历个个导入到ACCESS数据库中:/// <summary> /// 将所有好友都导出了然后存储在ACCESS数据库中了 /// </summary> public void readAllXml { for ( i = 0; i < 8; i) { fileName = "friends_" + Convert.(i * 20) + "_" +Convert.(i*20+20)+".xml";//按照存储XML文件时命名规则进行读取 readTsinaFriends(fileName); } };经过上面操作后你再打开你ACCESS数据库文件weibo.mdb文件中对应表就可以看到所以信息都已经导入到ACCESS中了如下图所示:5. 对ACCESS数据库查询并写成RSS阅读器OPML格式对于制作RSS阅读器OPML格式需要数据只有两条字段:个是id字段个是name字段这个过程实际上就是对数据进行XML编码过程啥都不说了切都在代码中了(也是在工程中写):/// <summary> /// 建立新浪微博RSS文件 /// </summary> public void CreateTsinaRssXmlFile { OleDbConnection aConnection = OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:\\coursware\\网络软文\\API_微波\\weibo.mdb"); strCmd = "select id asidnum,screen_name as name from Friends"; //从ACCESS中获取数据 aConnection.Open; OleDbDataAdapter da = OleDbDataAdapter(strCmd, aConnection); DataSet ds = DataSet; da.Fill(ds, "TSina"); ds.DataSetName = "RssReader"; DataTable dt = ds.Tables[0];//数据集第0张表格XmlDocument xmldoc; XmlElement xmlelem; xmldoc = XmlDocument; //加入XML声明段落XmlDeclaration xmldecl; xmldecl = xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null);xmldoc.AppendChild(xmldecl); //加入个根元素 xmlelem = xmldoc.CreateElement(" ;", "opml", " ; "); xmldoc.AppendChild(xmlelem); XmlNode root = xmldoc.SelectSingleNode("opml");//查找<opml>节点 XmlElement xeHead = xmldoc.CreateElement("head");//创建个<head>节点 //为head节点增加子节点 XmlElement xeHeadsub = xmldoc.CreateElement("title"); xeHeadsub.InnerText = "Rss Reader";//设置节点文本 xeHead.AppendChild(xeHeadsub);//添加到<head>子节点中root.AppendChild(xeHead);//添加到<head>节点中 //增加body子节点然后将所有RSS订阅信息全部写入到body节点中间 XmlElement xeBody = xmldoc.CreateElement("body");root.AppendChild(xeBody); //第层循环是标签(文件夹循环)由于本次只做个标签所以就只循环次了 //RSS文件夹属性节点 XmlElement xe1 = xmldoc.CreateElement("outline"); xe1.SetAttribute("text", "Tsina"); //设置该节点title属性 xe1.SetAttribute("title", "Tsina");//设置该节点title属性 --第层outline节点属性表示是RSS标签或者说是文件夹 //下面就要开始为此文件夹节点添加下属子节点也就是添加些实质RSS地址了strTitle = .Empty; strText = .Empty; strXmlUrl = .Empty; strHtmlUrl = .Empty; for ( i = 0; i <dt.Rows.Count; i) { strTitle = dt.Rows[i]["NAME"]..Trim; strText = strTitle; strXmlUrl = "/SinaRss.aspx?uid=" + dt.Rows[i]["IDNum"]..Trim; strHtmlUrl = "/ " + dt.Rows[i]["IDNum"]..Trim; XmlElement xesub1 = xmldoc.CreateElement("outline");xesub1.SetAttribute("text", strText);//设置该节点title属性 xesub1.SetAttribute("title", strTitle);//设置该节点title属性 --第层outline节点属性表示是RSS标签或者说是文件夹 xesub1.SetAttribute(" type", "rss"); xesub1.SetAttribute("xmlUrl", strXmlUrl); xesub1.SetAttribute("htmlUrl", strHtmlUrl);xe1.AppendChild(xesub1);//添加到<Node>节点中 } xeBody.AppendChild(xe1); //保存创建好XML文档 xmldoc.Save(Server.MapPath("RssReader.xml")); };最后在指定目录下就自动生成了个RssReader.xml文件了大功告成了!然后将此文件就可以导入到任何个RSS阅读器中了用户就能够通过RSS阅读器来获取微博信息了而且现在RSS阅读器都有个键转贴到微博功能很方便不想转到自己微博也可以通过RSS阅读器直接收藏到阅读器中辛苦了两天今天能有这么点小成果还是觉得很不错呵呵也祝大家也能好运本次代码比较还需要各种完善比如如何将所以数据写成个XML文件这个笔者就暂时不做了留给大家去做吧Rss阅读器效果图如下:后记:新浪微博开放了API从此新浪微博可玩性就变强了很多了写下本文主要是为了抛砖引玉其实还有很多其它功能笔者想实现但现在毕业在即还要忙毕业设计所以希望大家可以试试比如利用API来备份用户发微博等等最后也写上本人微博地址吧如果有何指教请留言:/fly4u-----------------------------------------------Author:点滴BeerEmail /Gtalk:dreamzsm@From:/beerNotes:欢迎转贴但请在页面中加个链接注明出处就当是对作者点小鼓励吧^_^Time:2010-5-17作者:点滴Beer出处:/beer/本文版权归作者和博客园共有欢迎转载但未经作者同意必须保留此段声明且在文章页面明显位置给出原文连接请尊重作者劳动成果Tag标签: 新浪微博,API,ACCESS,XML2010-5-18 11:09:39疯狂代码 /。