文档章节

腾讯微博关系链计算

彼得
 彼得
发布于 2014/02/06 15:40
字数 993
阅读 5941
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day60-20180818-流利阅读笔记-待学习

钉钉:工作的归工作,生活的…也归工作? 毛西 2018-08-18 1.今日导读 你用过“钉钉”么?被公司要求使用钉钉的感受是如何的呢?这款阿里巴巴旗下的移动办公社交平台在弯道超车微信、为许多企...

aibinxiao
49分钟前
6
0
Kubernetes的HTTPS和证书问题,汇总

通过Kubernetes建立服务网站,需要干的事情和HTTPS和证书问题,汇总如下: 建立Nginx服务器 搞服务器第一步,Ubuntu 18.04设置静态IP 安装Nginx服务。 Kubernetes的deployment使用 创建服务,...

openthings
今天
2
0
php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
今天
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
今天
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部