关于调用新浪微博与腾讯微博
有一个很简单的需求,我想把自己的微博的内容输出到我的网站上。本以为是个很简单的事情,结果折腾了一晚上。
首先想到使用新浪微博,因为平常自己用的就是新浪微博。网上有很多关于新浪微博的API开发,首先就找到了dudu站长的分享:http://www.cnblogs.com/cmt/archive/2010/05/13/1733904.html 第一步是要申请账号:http://open.weibo.com/ 现在申请已经不需要发邮件了。非常简单,申请成为开发者,然后创建应用,填写正确的邮箱地址,马上就收到App Key了。
拿到这个Key后,没有照dudu的代码试一遍,因为其介绍的是发布内容到微博,而我的要求是获取微博内容到网站。 文章下面推荐使用:http://code.google.com/p/opensinaapi/ ,下载之后便可以直接使用了。里面有个示例代码,修改web.config中的appkey后可以直接运行。
点击连接按钮后,弹出窗口,需要授权。
授权完成后,即可调用相关方法,返回也没有问题,可以成功输出。
本以为皆大欢喜,但总觉得哪里不对,是“授权”!每次登录都会弹出这该死的授权页面。
尝试按照dudu文章里面的代码,结果总是报错:
反复查找新浪的开发指南,始终没找到方法,又去了开发者论坛找:http://forum.open.weibo.com/ 有与我碰到同样问题的朋友,不过也没有解决办法。
不过得到几个关键信息:
1.使用oAuth是一定会弹出授权页面的。
2.basic登录已经不开放了。
3.oauth2.0授权有效期是24小时。
4.用户名密码方式需要申请。
几个有用的帖子:http://forum.open.weibo.com/read.php?tid=14795&fpage=4&page=1
http://forum.open.weibo.com/read.php?tid=6715
http://forum.open.weibo.com/read.php?tid=8036
实在想不到什么好办法了,只好继续搜索。
beer提供了一种方法获取RSS:http://www.cnblogs.com/beer/archive/2010/05/17/1737679.html 不过这个方法我没有试。
新浪的路看来是走不通了,抱着侥幸的心理试试腾讯的微博。
类似的方法进行开发者申请,同样是创建应用后通过邮件收到appKey.阅读开发文档的时候有个让我眼前一亮的东东:RSS/JSONP输出。
https://open.t.qq.com/resource.php?i=3,3
需要登录访问,可以直接获取两种方式的调用地址:
直接输入浏览器中即可出现jsonp的数据(要多刷新几次)。这不正是我想要的东东吗?本以为万事大吉,想通过jquery的getJSON()轻松获取:
$.getJSON("http://v.t.qq.com/output/json.php", { type: "2", name: "dragonice", sign: "fa46dfdc668d42faf78b11193ea12db7ec207678" }, function (db) { var msg = ""; for (var i = 0; i < db.data.length; i++) { msg += "<p>" + db.data[i].content + "</p>"; } document.getElementById('weibo').innerHTML = msg; } );
结果死活得不到数据。不甘心,可能是json和jsonp不同,找到一篇文章:http://www.cnblogs.com/cfanseal/archive/2009/05/19/1460382.html通过ajax()来尝试:
$.ajax({ url: "http://v.t.qq.com/output/json.php?type=2&name=dragonice&sign=fa46dfdc668d42faf78b11193ea12db7ec207678", type: "GET", dataType: "JSONP", success: function (db) { alert("a"); var msg = ""; for (var i = 0; i < db.data.length; i++) { msg += "<p>" + db.data[i].content + "</p>"; } document.getElementById('weibo').innerHTML = msg; } });
没有成功(有时会报weiboData()没有定义的错误。)。反反复复试了N次,还是不成功。装个chrome浏览器(chrome确实比ie9快,MS怎么这么不给力啊!)。调试后发现数据得到了,但是处理不正确。整了N久还是不行。本来想放弃算了,还是求助了下Google,结果发现了这个:http://wiki.xnwww.net/front/%E9%80%9A%E8%BF%87%E8%A7%A3%E6%9E%90jsonp%E6%A0%BC%E5%BC%8F%E8%BE%93%E5%87%BA%E8%85%BE%E8%AE%AF%E5%BE%AE%E8%96%84
<div id="weibo"> 微薄正在加载中</div> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript"> function weiboData(db){ var msg=""; for(var i=0;i<db.data.length;i++){ msg+="<p>"+db.data[i].content+"</p>"; } document.getElementById('weibo').innerHTML=msg; } </script> <script type="text/javascript" src="http://v.t.qq.com/output/json.php?type=1&name=noecnet&sign=d761e44f9240993f8176ed38088ed224c6fd71bc"></script>
一段代码就搞定了。
其实有种方法一直想试,但是没js调用没成功,怎么都不甘心。尝试一下发现是可以的:
string url = "http://v.t.qq.com/output/json.php?type=2&name=dragonice&sign=fa46dfdc668d42faf78b11193ea12db7ec207678"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "application/x-www-form-urlencoded"; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream myResponseStream = response.GetResponseStream(); StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("UTF-8")); string retString = myStreamReader.ReadToEnd(); Response.Write(retString);
作 者:doku
出 处:http://www.cnblogs.com/kulong995/
关于作者:喜欢编程,喜欢美食,专注于.NET项目开发。
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!