03-获取 TargetUser 的 Followings 列表

简介:

03-获取 TargetUser 的 Followings 列表

郑昀 201005  隶属于《02.技术预研》小节

【注:去年的旧文。上一篇是《02-在 Kuber SocialBadge 基础上再前进一步》和《01-学习 Kuber 的 SocialBadge 好榜样 | 02.技术预研 | Social》,下一篇是《04-WebFinger的利用 | 02.技术预研 | Social》】

从 www.google.com/profiles/jason5ng32 的链接开始吧。

一、通过 TargetUser 的输入连接获取他的其他链接

测试代码:

import socialgraph 
q="www.google.com/profiles/jason5ng32" 
its_me = u'me' 
types = u'types' 
instance = socialgraph.Api()

results = instance.lookup(q)

attributes = [k for k in results['nodes'].iteritems()][0][1]['attributes'] 
nodes_referenced = [k for k in results['nodes'].iteritems()][0][1]['nodes_referenced']

# 此人姓名: 
myname = attributes['fn']) 
# 此人其他链接: 
links_of_me = ['http://'+q,]#把起源链接也加进去 
for link in nodes_referenced.iterkeys(): 
    if(its_me in nodes_referenced[link][types]): 
        #print link 
        links_of_me.append(link) 
all_nodes_of_me = ','.join(links_of_me)

不过,为了确保我们主要精力放在那些常用的社会化媒体上,还要过滤一下这些链接。

 

二、把 TargetUser 的所有链接提交给 SocialGraph 获取 Followings

在提交前,为了确保我们主要精力放在那些常用的社会化媒体上,还要过滤一下这些链接。只保留 Twitter 、Google Reader Shared Items、Google Profile、Delicious 、豆瓣这几种链接。

获取 followings 的 http 请求类似于:

http://socialgraph.apis.google.com/lookup?q=http%3A%2F%2Fwww.google.com%2Fprofiles%2Fzhengyun%2Chttp%3A%2F%2Fwww.google.com%2Freader%2Fshared%2F15221435823542888940&fme=1&pretty=1&sgn=0&edi=1&edo=1&jme=1&pretty=1

测试代码:

import re

""" 
import httplib2 
import socks 
h = httplib2.Http(proxy_info = httplib2.ProxyInfo(socks.PROXY_TYPE_HTTP, 'localhost', 1984)) 
""" 
import socialgraph 
#q="www.google.com/profiles/jason5ng32" 
#q="twitter.com/fenng" 
#q="www.google.com/profiles/electronixtar" 
q="www.google.com/profiles/zhengyun" 
its_me = u'me' 
its_contact = u'contact' 
types = u'types' 
patternSupportServices = re.compile(u'(douban\.|twitter\.|google\.com\/reader\/shared|delicious\.|google\.com\/profile\/)',re.IGNORECASE)

instance = socialgraph.Api() 
#instance = socialgraph.Api(httplib2_inst=h)

results = instance.lookup(q)

from print_r import print_r 
attributes = [k for k in results['nodes'].iteritems()][0][1]['attributes'] 
nodes_referenced = [k for k in results['nodes'].iteritems()][0][1]['nodes_referenced']

# 此人姓名: 
myname = attributes['fn'] 
# 此人其他链接: 
support_links_of_me = ['http://'+q,] 
for link in nodes_referenced.iterkeys(): 
    if(its_me in nodes_referenced[link][types]): 
        if(len(patternSupportServices.findall(link))>0): 
            support_links_of_me.append(link)

# 过滤后的此人的链接,以逗号分隔 
support_nodes_of_me = ','.join(support_links_of_me) 
print support_nodes_of_me 
# 请求 Followings : 
results = instance.lookup(support_nodes_of_me,edo=1,edi=0,fme=1,jme=0) 
myFollowings = [] 
for node in results['nodes'].iteritems(): 
    nodes_referenced = node[1]['nodes_referenced'] 
    for fo in nodes_referenced.iterkeys(): 
        if(its_contact in nodes_referenced[fo][types]): 
            if(len(patternSupportServices.findall(fo))>0): 
                myFollowings.append(fo)

print myFollowings 
print_r(instance._last_request['res']['content-location'])

 

注:

这里有一个问题:

当想获取 Google Reader 里关注的人时,有一个选项可能阻碍获取。

估计必须该人在 google profile 里专门为“在我的个人资料上显示我正在关注的人和正在关注我的人的名单” 打上勾,才能够使得 google social graph 显示该人的关注列表。待确认。 
默认“在我的个人资料上显示我正在关注的人和正在关注我的人的名单” 是打开的,当初 google buzz 出世时大家还争论过这个默认选项侵犯隐私。

 

附录A:

http://pypi.python.org/pypi/socialgraph/

是Python wrapper for Google's Social Graph API。

注意1:它使用了 httplib2 库,需要预先安装。

注意2:它使用了 cjson 库,需要用 easy_install python-cjson 安装。但在 Windows 上安装之前,需要先确保你安装了 MingGW,然后阅读 http://python.cx.hu/python-cjson/#win32 ,就是试图用 MingGW 作为编译器。

如果你安装 cjson 失败,那么就需要修改 socialgraph.py 的源代码了,把

import cjson

替换为:

# We require a JSON parsing library. These seem to be the most popular. 
try: 
    import simplejson 
    parse_json_func = lambda s: simplejson.loads(s.decode("utf-8")) 
except ImportError: 
    try: 
        import cjson 
        parse_json_func = lambda s: cjson.decode(s.decode("utf-8"), True) 
    except ImportError: 
        import json 
        parse_json_func = lambda s: _unicodify(json.read(s))

也就是优先采用 simplejson 解析 json。

然后把两处

cjson.decode(content)

都替换为

parse_json_func(content)

。

注意3:

为了更好地控制 HTTP 请求,我修改了 socialgraph.py 的代码:传入了 httplib2 的实例。这样可以用代理;lookup 方法增加了一个 jme 的参数。

目录
相关文章
|
C语言 容器
【Hello Algorithm】认识一些简单的递归
【Hello Algorithm】认识一些简单的递归
296 0
|
Android开发
教你在Android手机上使用全局代理!
前言:在Android上使用系统自带的代理,限制灰常大,仅支持系统自带的浏览器。这样像QQ、飞信、微博等这些单独的App都不能使用系统的代理。如何让所有软件都能正常代理呢?ProxyDroid这个软件能帮你解决!使用方法及步骤如下: 一、推荐从Google Play下载ProxyDroid,目前最新版本是v2.6.6。
17931 0
|
11月前
|
人工智能 数据可视化 测试技术
Coze, Dify, N8N:三款主流AI工作流平台在测试中的应用对比
在敏捷开发背景下,Coze、Dify和n8n三大AI工作流平台正革新测试自动化。Coze零代码易上手,适合AI密集型任务;Dify支持私有化部署,适配企业级复杂流程;n8n开源可控,擅长系统集成。三者各有优势,助力测试团队实现高效人机协同,提升测试效能。
|
调度 开发工具 Android开发
【HarmonyOS Next】鸿蒙应用进程和线程详解
进程的定义: 进程是系统进行资源分配的基本单位,是操作系统结构的基础。 在鸿蒙系统中,一个应用下会有三类进程:
563 0
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
1689 4
|
JavaScript
Vue3按钮(Button)
这是一个高度可定制的按钮组件,支持多种属性设置,包括按钮类型、形状、图标、尺寸、背景透明度、波纹颜色、跳转地址、打开方式、禁用状态、加载状态及指示符样式等。预览图展示了不同配置下的按钮样式变化。组件通过Vue实现,并提供了丰富的自定义选项以适应各种场景需求。
1239 1
Vue3按钮(Button)
|
资源调度 JavaScript Windows
'vue-cli-service' 不是内部或外部命令,也不是可运行的程序问题解决
【5月更文挑战第7天】'vue-cli-service' 不是内部或外部命令,也不是可运行的程序问题解决
22170 3
|
安全 网络安全 数据安全/隐私保护
网络拓扑结构入门快速介绍
网络拓扑结构入门快速介绍
|
消息中间件 缓存 NoSQL
利用Redis实现高效缓存管理与加速
本文将探讨如何利用Redis作为缓存管理工具,通过深入分析Redis的特性、使用场景和优势,帮助开发人员更好地理解和应用Redis来提升系统性能和响应速度。
|
编译器 Linux iOS开发
CMake 秘籍(一)(1)
CMake 秘籍(一)
273 0