文档章节

腾讯微博关系链计算

彼得
 彼得
发布于 2014/02/06 15:40
字数 993
阅读 5964
收藏 178

目标1:后台发微博,查看关系链等

第一步

成为开发者 http://dev.t.qq.com/ 需要填入一些基本的信息,如身份证号码等。

第二步:

创建应用,选择站内应用-非托管 ,主要是为了拿到appkey和app secret

第三步:

下载SDK http://wiki.open.t.qq.com/index.php/SDK%E4%B8%8B%E8%BD%BD

python SDK在这里 https://github.com/wbopenplatform/PY-SDK

第四步:

编写脚本,只运行 get_access_token()函数,获取到一个url,打开url,授权后获得新的url,获得ACCESS_TOKEN和OPENID的值。

第五步:

运行脚本的tweibo_test()函数,即可操作你的微博发消息或者查看你的粉丝,查看你关注的人。

# -*- coding:utf-8 -*- #
#! /usr/bin/env python

import time
import urllib  
import urllib2  
from tweibo import *

#首先要创建自己的应用,换成你的 APPKEY http://dev.t.qq.com/
APP_KEY = "801475XXX"  
APP_SECRET = "e52f7267447c3ccbcf7884809dbdXXXX"
CALLBACK_URL = "my.oschina.net/sanpeterguo"

#你的应用会去得到某个微博t.qq.com/peterguo的授权,获得方法即执行get_access_token即可获得一个url,这个url用浏览器打开,授权后连接地址中会增加ACESS_TOKEN参数,拿出来。

ACCESS_TOKEN = "06611ad81a58d8f517f614426f2XXXXX";
OPENID="30A1ACF2E94E5835A83D57CB80XXXXXX"

IMG_EXAMPLE = "example.png"

#调用API只需要上面的五个参数  APP_KEY APP_SECRET CALLBACK_URL  ACCESS_TOKEN OPENID

# 返回text是unicode,设置默认编码为utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')

def get_access_token():
    oauth = OAuth2Handler()
    oauth.set_app_key_secret(APP_KEY, APP_SECRET, CALLBACK_URL)
    print oauth.get_access_token_url()
    
def tweibo_test():
    oauth = OAuth2Handler()
    oauth.set_app_key_secret(APP_KEY, APP_SECRET, CALLBACK_URL)
    oauth.set_access_token(ACCESS_TOKEN)
    oauth.set_openid(OPENID)
    
    api = API(oauth)    
    if False:
        #获取t.qq.com/qqfarm 的三条微博
        ret = api.get.statuses__user_timeline(format="json", name="qqfarm", reqnum=3, pageflag=0, lastid=0, pagetime=0, type=3, contenttype=0)
        print ret.data.info[0]['text']
    
    #获取自己的信息 http://test.open.t.qq.com/#friends/idollist

    if False:
        #知道微博id,获取自己的某条微博内容,查看该微博的id,打开源码找: <ul id="talkList" class="LC"><li  id="338597029252485" rel
        #view-source:http://t.qq.com/peterguo/mine
        api.get.t__show(format="json", id=338597029252485).data.text
        api.get.t__list(ids=[338597029252485, 338597029252485])
    
    if False:
        #获取peterguo的粉丝
        ret = api.get.friends__user_fanslist(name='peterguo')
        #print ret.data.info[0]['name']
        print "Peterguo s fans......"
        for dItem in ret.data.info:
            print dItem['name']    
 
    if False:
        #获取自己的偶像列表
        print "Peterguo s idols ......"
        ret = api.get.friends__idollist(name="peterguo", reqnum=20, pageflag=2)
        #print ret.data.info[5]['name']
        for dItem in ret.data.info:
            print dItem['name']
        
    if False:    
        #发微博 
        api.post.t__add(content='hi python')
        
        #发带图的微博,先上传图,获取到图片url,再发微博
        # UPLOAD /t/upload_pic
        pic1 = api.upload.t__upload_pic(format="json", pic_type=2, pic=open(IMG_EXAMPLE, "rb"))
        print ">> IMG: %s" % (pic1.data.imgurl)

        # POST /t/add_pic_url
        content_str2 = "哈哈哈 demo: %s, time %s" % (IMG_EXAMPLE, time.time())
        pic_urls = "%s" % (pic1.data.imgurl)
        tweet_pic1 = api.post.t__add_pic_url(format="json", content=content_str2, pic_url=pic_urls)
        print ">> time=%s, http://t.qq.com/p/t/%s" % (tweet_pic1.data.time, tweet_pic1.data.id)


    #双向收听的
    
    nCount = 0
    lCrawNames = ["waxjwaxj", "peterguo", "joliexu"]
    if len(sys.argv) != 1:
        lCrawNames = sys.argv[1:]
    for craw_name in lCrawNames:
        nIdx = 0
        while True:
            time.sleep(3)
            try:
                ret = api.get.friends__mutual_list(name=craw_name, reqnum=10, pageflag=1, startindex=nIdx)
            except tweibo.TWeiboError:
                break     
            for dItem in ret.data.info:
                nCount += 1
                try:
                    print nCount, dItem['name'], " -> ", dItem['nick']
                    fp = file("src.txt", "at")
                    fp.write("%s:%s:%s\n" %(craw_name, dItem['name'], dItem['nick']))
                    fp.close()
                except Exception,e:
                    print e

            nIdx += 10       
          

if __name__ == "__main__":    
    tweibo_test()


目标2:生成的数据如果配合networkx 进行计算绘图:

如下是计算笔者,笔者妻子和一个同事的微博互粉关系图:

  代码:

#-*- coding:utf8-*-

import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()


#G.add_nodes_from([3,4,5,6])
#G.add_edges_from([(3,5),(3,6),(6,7)])

def loadFile2List(strFilename):
    '''
    load a file and return content as list, every item is a line, except "#"
    '''
    retLst = []
    try:
        fp = file(strFilename, "rt")
    except IOError:
        assert(False)
        return retLst
    while True:
        line = fp.readline()
        if len(line) == 0:
            break;
        if line.startswith('#') or line == '\r\n' or line == '\n':
            continue
        line = line.strip()
        retLst.append(line)
    return retLst
    
srcLst = loadFile2List("src.txt")
dName2ListFriends = {}
for strLine in srcLst:
    lSptLine = strLine.split(":")
    if lSptLine == "":
        continue
    if not (lSptLine[0] in dName2ListFriends.keys()):
        dName2ListFriends[lSptLine[0]] = []
    dName2ListFriends[lSptLine[0]].append(lSptLine[1])

print dName2ListFriends     

lNodes = []
lEdges = []
for strKeyName in dName2ListFriends.keys():
    lNodes.append(strKeyName)
    for strName in dName2ListFriends[strKeyName]:
        lNodes.append(strName)
        lEdges.append((strKeyName, strName))

lNodes = list(set(lNodes))
lEdges = list(set(lEdges))
print lEdges
#raw_input("pause")
G.add_nodes_from(lNodes)
G.add_edges_from(lEdges)

nx.draw(G)
plt.savefig("wuxiangtu.png")
plt.show()


参考1:https://github.com/upbit/tweibo-pysdk/wiki/demo.py%E8%AF%A6%E8%A7%A3 

参考2:https://github.com/upbit/tweibo-pysdk/wiki/OAuth2Handler

© 著作权归作者所有

共有 人打赏支持
彼得

彼得

粉丝 39
博文 122
码字总数 38726
作品 0
深圳
程序员
加载中

评论(16)

LastRitter
LastRitter
谢谢分享,我文章!!!!
konakona
konakona

引用来自“彼得”的评论

引用来自“konakona”的评论

不错的好文!
想问下楼主,腾讯微博有什么办法删除自己的微博内容吗?像新浪卧槽123那个APP那样! 2

http://test.open.t.qq.com/ 里面有删除微博的接口。

好!看到了,我打算弄一个。
彼得
彼得

引用来自“中山野鬼”的评论

引用来自“lazyphp”的评论

不错!这个貌似只是分析2 - 3层关系链。

层数多了,量上去了哈。另外,不知道博主对环怎么处理的。

环的处理,networkx中都有现成的函数可以调用。
参考http://my.oschina.net/sanpeterguo/blog/195390
彼得
彼得

引用来自“huangjacky”的评论

代码感觉看过的,而且有本书专门介绍这个,不过例子用的是twitter的。

对,是有本书《社交网站的数据挖掘与分析》 http://book.douban.com/subject/10344930/ 看了一阵子,很多API都过时了,所以决定搞腾讯微博的。用自己的帐号做试验,比较有趣。
彼得
彼得

引用来自“Manhattan”的评论

看圖之後整個人都不舒服了。。

关系链计算,重点不在图。不过图形看起来更直观,这只是一个真是的小例子。
彼得
彼得

引用来自“konakona”的评论

不错的好文!
想问下楼主,腾讯微博有什么办法删除自己的微博内容吗?像新浪卧槽123那个APP那样! 2

http://test.open.t.qq.com/ 里面有删除微博的接口。
彼得
彼得

引用来自“阳光灿烂的日子”的评论

我有密集恐惧症 看到你的图 一天都不舒服

这个只是举例入门而已,重点不在绘图,重点在计算。13
huangjacky
huangjacky
代码感觉看过的,而且有本书专门介绍这个,不过例子用的是twitter的。
中山野鬼
中山野鬼

引用来自“lazyphp”的评论

不错!这个貌似只是分析2 - 3层关系链。

层数多了,量上去了哈。另外,不知道博主对环怎么处理的。
itfanr
itfanr
看圖之後整個人都不舒服了。。
腾讯微博java(android) api

由于现在腾讯微博提供的java(android) sdk功能过弱,自己搞了个java sdk包,同样适用于android。包含腾讯微博目前提供的95%的api,几乎所有主要功能api,用法简单。 下面介绍源码地址和jar包...

鉴客
2011/12/15
3K
1
AppCan 携手腾讯微博开放平台共推跨平台开发工具

日前,腾讯微博开放平台与国内首个基于HTML5移动应用开发平台AppCan达成战略合作。腾讯微博开放平台将率先引入专门定制的AppCan-SDK(SDK即软件开发工具包),这一举措将简化腾讯微博分享流程...

ruihe124724903
2012/05/10
0
0
揭秘腾讯开放的底线

【中国企业家网】(记者 袁茵)两周后的6月15日,腾讯将召开开发者大会。此后,马化腾就要实践他在《中国企业家》年会上的宣言,腾讯进行全面开放。 截止目前,腾讯开放计划已经初露端倪。刚...

戴威
2011/05/28
1K
12
腾讯下月推行实名制 你准备好了么

QQ突然弹出了个邀请框,邀请我体验2010bate3版本,点开发现,新版本的试用要求有点怪异,要求开通了“腾讯朋友”,且头像通过审核,并且好友数在20以上。这不难让人联想到腾讯经常提出的实名...

红薯
2011/05/27
2.8K
24
Chrome有了直接调用QQ微博官方API的扩展

相信有很多网友都喜欢使用QQ微博和Chrome浏览器。但每次发微博,都是要先登录QQ微博点多次才能搞定一条微博信息。有没有想过一键微博?甚至懒人的鼠标只希望选中一段话,都不想复制粘贴怎么办...

红薯
2010/11/23
1K
6

没有更多内容

加载失败,请刷新页面

加载更多

LSM-Tree 大数据索引技术

一、LSM-Tree概述 核心思想就是放弃部分读能力,换取写入能力的最大化。LSM-Tree ,这个概念就是结构化合并树(Log-Structured Merge Tree)的意思,它的核心思路其实非常简单,就是假定内存...

PeakFang-BOK
32分钟前
1
0
vue.js响应式原理解析与实现

从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染。之后,再接触了vue.js,当时也一度很好奇vue.js是如何监测数据更新并且重新...

peakedness丶
38分钟前
1
0
Weblogic补丁升级操作步骤

linux平台: weblogic1036 1:停止weblogic服务 2:打FMJJ补丁 a:获取weblogic_home目录并执行命令:export weblogic_home="/weblogic/wls1036_x64",(此目录一般为目录“user_projects”上...

fang_faye
51分钟前
1
0
04-《Apache Tomcat 9 User Guide》之部署项目

1.Introduction Deployment is the term used for the process of installing a web application (either a 3rd party WAR or your own custom web application) into the Tomcat server. 部......

飞鱼说编程
51分钟前
1
0
一位十年的老码农他眼中的区块链

大家可能已经听说过比特币、莱特币、以太币等等,以及它们作为一种新货币在市场上的潜力。 有趣的是,很多投资比特币的人也提到了区块链之类的东西。 显然,这项技术是比特币等其他东西的"基...

小刀爱编程
59分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部