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 的参数。

目录
相关文章
|
机器学习/深度学习 人工智能 异构计算
知识蒸馏的基本思路
知识蒸馏(Knowledge Distillation)是一种模型压缩方法,在人工智能领域有广泛应用。目前深度学习模型在训练过程中对硬件资源要求较高,例如采用GPU、TPU等硬件进行训练加速。但在模型部署阶段,对于复杂的深度学习模型,要想达到较快的推理速度,部署的硬件成本很高,在边缘终端上特别明显。而知识蒸馏利用较复杂的预训练教师模型,指导轻量级的学生模型训练,将教师模型的知识传递给学生网络,实现模型压缩,减少对部署平台的硬件要求,可提高模型的推理速度。
990 0
资源块|带你读《5G空口特性与关键技术》之九
3GPP TS38.211 中对 Point A 进行了定义。需要说明的是,2018/6 版本的TS38.211-f20 中的定义在 2018/9 版本中没有变化,不过在2018/12 版本 TS38.211-f40 中,基于 RAN1#94b 会议的决议进行了修改,有关信息请参看 RAN1#94b会议报告以及提案 R1-1811817 和 R11810834。
12344 1
资源块|带你读《5G空口特性与关键技术》之九
|
设计模式 架构师 大数据
我的架构师之路——阿里云 MVP 沈剑
沈剑,公众号“架构师之路”的作者,曾任百度高级工程师和58同城高级架构师、技术委员会主席、技术学院优秀讲师,现为到家集团技术委员会主席和技术VP,同时也是快狗打车(原58速运)的CTO。本文是沈剑老师在阿里云的直播中分享的一些自己关于架构师的看法和成为架构师的心路历程的第一部分。
6949 0
我的架构师之路——阿里云 MVP 沈剑
|
人工智能 自然语言处理 程序员
AI战略丨拓展智能边界,大模型体系全面升级
阿里云在基础模型体系和生态、模型工程化落地路径、端云协同解决方案等多维度上都在快速迭代。
|
安全 网络安全 数据安全/隐私保护
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限
访问控制列表(ACL)是网络安全中的一种重要机制,用于定义和管理对网络资源的访问权限。它通过设置一系列规则,控制谁可以访问特定资源、在什么条件下访问以及可以执行哪些操作。ACL 可以应用于路由器、防火墙等设备,分为标准、扩展、基于时间和基于用户等多种类型,广泛用于企业网络和互联网中,以增强安全性和精细管理。
1806 7
|
11月前
|
JavaScript 前端开发 测试技术
盘点原生JavaScript中直接触发事件的方式
本文全面探讨了原生JavaScript中触发事件的多种方式,包括`dispatchEvent`、`Event`构造函数、`CustomEvent`构造器、直接调用事件处理器以及过时的`createEvent`和`initEvent`方法。通过技术案例分析,如模拟点击事件、派发自定义数据加载事件和实现提示框系统,帮助开发者掌握这些方法在实际开发中的应用,提升灵活性与兼容性。
393 3
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
645 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
调度
crash命令 —— ps
crash命令 —— ps
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之遇到SQL语法错误,该如何排查
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
网络协议 安全 测试技术
Windows安装禅道系统结合Cpolar实现公网访问内网BUG管理服务
Windows安装禅道系统结合Cpolar实现公网访问内网BUG管理服务
471 3