Fork me on GitHub

关于调用新浪微博与腾讯微博

   有一个很简单的需求,我想把自己的微博的内容输出到我的网站上。本以为是个很简单的事情,结果折腾了一晚上。

   首先想到使用新浪微博,因为平常自己用的就是新浪微博。网上有很多关于新浪微博的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

需要登录访问,可以直接获取两种方式的调用地址:

如我的:http://v.t.qq.com/output/json.php?type=2&name=dragonice&sign=fa46dfdc668d42faf78b11193ea12db7ec207678 

直接输入浏览器中即可出现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);

  

posted @ 2011-12-13 01:20  idoku  阅读(547)  评论(1编辑  收藏  举报