01-Twitter Streaming API的调用 | 02.数据获取

简介:

01-Twitter Streaming API的调用

郑昀 201006 隶属于《实时分析搜索引擎/02.数据获取》小节

修改历史:

1 2010年10月修正,因为Twitter要求必须走OAuth接口。

 

Twitter 提供了两种 Streaming 接口,让第三方可以省却轮询,由 Twitter 主动把合适的数据推送过来,近乎实时。

1、chirpstream api

接口地址是:http://chirpstream.twitter.com/2b/user.json [需FQ]

这个接口只是把你和你的好友以及各种与你有关的消息都推送过来。

参考此文《Tutorial: consuming Twitter's real-time stream API in Python 》,也可以从http://pastebin.com/U4m1Zsvs 这里复制此文源代码。

你需要维持一个 Socket 长连接。

你还需要通过 Twitter 的 OAuth 验证。

你将会得到一个 Twitter 用户登录后所应该看到的各种消息流。

我们检测单次数据包的最后是否以 \r\n 结尾:

if data.endswith("\r\n") and self.buffer.strip():

以此来判断检测一个完整的 JSON object 。

程序需要处理的几种常用消息:

  • friends : 登陆用户都有哪些好友,即 my followings;这是一个id数组,每一个 id 代表一个用户,此 id 并非用户的 screenname ,而是 Twitter 用户的唯一数字标识。你可以通过持续积累 tweets 消息中的 user id ,从而获知自己的 friends id 数组中每一个 id 对应是谁。
  • event 之 retweet : 其他用户使用官方格式的 retweet 转发的消息;
  • event 之 favorite : 其他用户使用官方格式的 favorite 按钮收藏的消息;
  • event 之 follow : 其他用户关注了本登陆用户;
  • tweet : 普通的消息。从 in_reply_to_user_id 字段可获知是回复给谁的消息。

friends 消息数据示范如下:

{u'friends': [80831118, 750713, 1580781,]}


event 共有以下类型:

  • follow
  • direct_message
  • retweet
  • favorite
  • unfavorite
  • delete

event 之 消息数据示范如下:

{u'source': {u'id': 1490631, u'location': u'30.209214,120.198216',u'screen_name': u'Fenng'}, u'created_at': u'Sun Jun 20 08:46:09 +0000 2010', u'target': {u'id': 31347758, u'screen_name': u'minzhou',u'name': u'Min Zhou'u'following': True}, u'event': u'follow' }(已略去大量无关字段)即 Json 中用 u'event': u'follow' 来指明本消息是什么类型的 event 消息。

tweet 消息数据示范如下:

{u'text': u'@cnkang \u5176\u5b9e\u6211\u5bf9\u627e\u5927\u8d28\u6570\u66f4\u6709\u5174\u8da3\u2
026\u2026', u'created_at': u'Sun Jun 20 08:43:36 +0000 2010', u'coordinates': None, u'source': u'<a href="http://echofon.com/" rel="nofollow">Echofon</a>', u'in_reply_to_status_id': None, u'in_reply_to_screen_name': u'cnkang', u'in_reply_to
_user_id': 35457544, u'place': None, u'geo': None, u'id': 16604579153L, u'user': {u'id': 6132042, u'screen_name': u'delphij', u'following': None}}(已略去大量无关字段)这是一个 Reply 消息。一般 Twitter 客户端软件都是根据此消息体内的“in_reply_to_user_id ”字段判断被回复者的id 是不是自己的id,或者在不在自己的 friends id 数组里,如果都不是,就可以忽略此 Reply 消息。

2、streaming api

Twitter 的这个接口能够让第三方近乎实时地获取公开数据的各种子集:

『The Twitter Streaming API allows near-realtime access to various subsets of Twitter public statuses.』

接口地址:http://dev.twitter.com/pages/streaming_api ,需FQ。

2.1.权限问题

以 Streaming 方式连接 stream.twitter.com ,需要先通过 Twitter OAuth验证。

目前默认访问者只能使用 filter 这一个方法。

其他的 firehose 、retweet 、links 等方法则必须拥有访问权限,否则会得到如下提示:

Error 403 User not in required role

如果想申请特别权限,可以写信给 api@twitter.com ,说明原因。

2.2.判断 Json Object 结尾

由于是长连接,所以判断一个完整的 Json Object ,需要某个特殊标志。这还需要请求参数的配合。

Streaming API 的 filter 方法有一个输入参数:delimited。

它的含义『Indicates that statuses should be delimited in the stream. Statuses are represented by a length, in bytes, a newline, and the status text that is exactly length bytes. Note that "keep-alive" newlines may be inserted before each length.』

所以我们指定它的值是 newline ,这样 Json Object 之间就以 \r\n 作为分隔符。

文档上称 『 every object is returned on its own line, and ends with a carriage return. 
Newline characters (\n) may occur in object elements (the text element of a status object, for example), 
but carriage returns (\r) should not.』也就是说,\n 会出现在 Json Object 包体内,但 \r 则不会。
所以,我们检测单次数据包的最后是否以 \r\n 结尾:

if data.endswith("\r\n") and self.buffer.strip():

以此来判断检测 JSON object 的结尾。

2.3.Streaming API无法处理『Non-space delimited languages』

Twitter 的 John Kalucki 曾经这样回答:

We break the status text into tokens by whitespace and punctuation, then
apply the tokens to a hashmap of tracked terms. If the language doesn't have
whitespace, the only thing that will match is the entire Tweet.

即 Streaming API 目前还不能支持阿拉伯语、汉语、日语等『Non-space delimited languages』,原因是他们只能根据空格和标点把tweet打散成一个一个token。

http://apiwiki.twitter.com/User-Stream-Implementation-Suggestions 也有一句话提示:
『Non-space delimited languages are currently unsupported by track. For example: Arabic, Chinese, and Japanese language queries will not return results.』

2.4.track 参数的输入

先不理会他们能不能处理亚洲文字的追踪。

我们用

track = ["的","我","了","#duanzi","@rtmeme","@zhengyun"]

这么一个数组定义所要追踪的 keywords ,词与词是 Or(或) 的关系。注意,参考我的“玩聚网技术Wiki\01.数据抓取”之《06-HTTP请求中的编码问题》,必须对track里的中文字符的 UTF-8 编码字符串做转义:

trackKeywords = map(lambda s: unicode(s, 'gbk', 'ignore').encode('UTF-8', 'ignore'),track)

一旦一条新 tweet 发布,正文提及了 track 数组中的某一个词,这条消息就会被主动推送过来。它的 Json 格式与 chirpstream api 之 tweet 格式一样。

2.5.locations 参数的输入

filter 方法支持用发布者的地理位置过滤,比如 locations 参数为

[-74,40,-73,41]

就可以把从 New York 发布的 tweets 都推送过来。这也要求用户的 tweet 用 Geotagging API 发布,否则无法确定发布者的地理信息。默认用户设置中“Add a location to your tweets”这个选项是选中的。

-74,40的含义是,经度-74,维度40.

第一对经纬度应该是目标区域的SW(西南角)的位置信息。

-74,40和-73,41选中的区域叫做 bounding box  ,这个区域很小,经度维度之间不能相差一度。如果区域过大,会得到如下提示:

Location track must be less than 1 degrees on a side 。

你选中的目标区域,它的经纬度信息可从:http://www.getlatlon.com/ 得到。

注:中国大陆用户很多都是从代理上的 Twitter ,所以它的 geo 信息可能是代理的。

 

 

2.6.Twitter Annotations的追踪

Twitter Streaming API将支持Twitter Annotations:你可以track一个注释类型,比如你可以近乎实时地得到所有标注了“movie”注释类型的 tweets ;你还可以track一个注释类型和值。

背景知识:什么是Twitter Annotations. 背景PPT:[slideshare]Twitter API Annotations .

目录
相关文章
|
17天前
|
存储 数据挖掘 BI
API数据源:轻松接入各类业务系统数据
在数字化转型中,企业面临多样化的数据需求。Quick BI推出API数据源功能,支持广泛的数据接入,包括实时天气、电商交易及内部业务数据,极大丰富了可分析数据范围。该功能提供灵活的连接方式(抽取和直连模式)、多元授权机制(基础认证、前置请求)和自动化数据解析,降低了操作门槛,提升了配置效率。通过动态Token获取等最佳实践,确保数据安全与实时性,满足企业具体业务需求。了解更多,请访问Quick BI官方文档或瓴羊官网。
144 77
|
20天前
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
7天前
|
搜索推荐 数据挖掘 API
怎么利用商品详情 API 接口实现数据获取与应用?
在电商蓬勃发展的时代,数据成为驱动业务增长的关键。商品详情API接口为电商从业者、开发者和数据分析爱好者提供了获取海量商品数据的途径,助力精准营销、优化用户体验和提升运营效率。本文深入探讨如何利用商品详情API接口进行数据获取与应用,涵盖接口概念、工作原理、不同平台特点、准备工作、数据获取及处理、错误处理,并通过代码示例展示其在电商平台展示、数据分析、竞品分析和个性化推荐等场景中的应用。
28 12
|
13天前
|
JSON 缓存 API
解析电商商品详情API接口系列,json数据示例参考
电商商品详情API接口是电商平台的重要组成部分,提供了商品的详细信息,支持用户进行商品浏览和购买决策。通过合理的API设计和优化,可以提升系统性能和用户体验。希望本文的解析和示例能够为开发者提供参考,帮助构建高效、可靠的电商系统。
32 12
|
6天前
|
搜索推荐 API 开发者
深度解析:利用商品详情 API 接口实现数据获取与应用
在电商蓬勃发展的今天,数据成为驱动业务增长的核心。商品详情API接口作为连接海量商品数据的桥梁,帮助运营者、商家和开发者获取精准的商品信息(如价格、描述、图片、评价等),优化策略、提升用户体验。通过理解API概念、工作原理及不同平台特点,掌握获取权限、构建请求、处理响应和错误的方法,可以将数据应用于商品展示、数据分析、竞品分析和个性化推荐等场景,助力电商创新与发展。未来,随着技术进步,API接口将与人工智能、大数据深度融合,带来更多变革。
29 3
|
18天前
|
供应链 API 开发者
解锁电商数据的无限可能:探秘京东商品SKU信息API接口
京东商品SKU信息API接口是电商开发与运营中的重要工具,帮助开发者获取商品的详细属性,如库存、价格、规格等。通过该接口,电商平台可以丰富商品展示页面,提升用户体验;商家能实时掌握库存动态,优化销售策略;数据分析人员可深入洞察市场趋势,实现精准营销。使用前需注册京东开放平台账号、创建应用并获取API权限,同时仔细阅读API文档以确保正确调用。代码示例展示了如何用Python调用该接口,并处理返回数据。未来,该接口将在个性化推荐、智能库存管理和数据分析等领域发挥更大作用,助力电商业务创新与发展。
70 14
|
9天前
|
缓存 监控 API
如何查看商品销量 API 接口的性能指标数据
在电商蓬勃发展的时代,数据驱动业务决策至关重要。商品销量作为核心指标,依赖高效稳定的API接口获取。本文探讨如何查看和优化商品销量API的性能指标,包括响应时间、吞吐量、错误率和并发用户数,通过专业工具、日志分析及自定义代码实现监控与优化,确保业务稳定运行和用户体验提升。
28 2
|
26天前
|
监控 API 数据处理
速卖通商品数据尽在掌握:揭秘高效利用API接口获取详情策略
速卖通(AliExpress)API助力电商数据处理与分析,提供商品搜索、价格监控等功能。开发者需注册账号、创建应用并获取API Key。常用接口包括商品搜索和详情API。调用时注意频率限制、数据延迟及错误处理。本文介绍全过程并附Python示例代码,帮助提升电商运营效率。
|
2月前
|
数据采集 数据可视化 前端开发
怎么通过API获取电竞赛事实时数据
选择合适的电竞数据API是开发电竞应用的关键。主流API包括OP.GG、Liquipedia、Stratz、Riot Games和熊猫比分,涵盖LOL、DOTA2等游戏的实时数据。注册并获取API密钥后,需仔细阅读文档,了解资源、请求方法、必需参数及响应格式。编写代码调用API时,注意优化请求频率,避免封禁。最后,通过Web界面或可视化工具展示数据,如React/D3.js、Tableau等。示例代码展示了如何使用熊猫比分API获取即将开始的比赛信息。
|
2月前
|
供应链 监控 API
1688.item_search_shop API:开启电商数据新纪元
1688.item_search_shop API是阿里巴巴1688平台提供的核心接口之一,支持根据关键词搜索指定店铺的商品,并获取商品详情、图片、价格等信息。该API允许设定搜索结果排序方式,如按销量或价格排序,满足不同需求。开发者可将其集成到电商应用中,提升用户体验;市场分析人员可利用其进行趋势和竞争对手分析;供应链管理人员则能监控库存,优化策略。示例代码展示了如何使用Python调用该API,帮助开发者快速上手。这一API的推出标志着B2B电商领域商品搜索技术的重要进步,推动行业向更高效、智能的方向发展。