引入 phirehose,它可以让您轻松使用 PHP 处理 Twitter Streaming API!
你好。
我是Mandai,负责Wild 开发团队。
我不确定 Twitter 现在是否流行,或者是否已经建立,但Twitter Streaming API,所以我尝试了一下。
从头开始编写程序可能相当困难,所以我尝试使用一个方便的库,结果发现非常简单,所以我想向您介绍它。
获取 Twitter API 的访问令牌和访问密钥
没有这个,什么都不会开始,所以要尽快得到它。
您可以获取专用帐户或以现有用户身份获取一个帐户。
您登录 Twitter 并此处,将会出现一个名为“创建新应用程序”的链接,因此请从那里注册。
Streaming API 对访问次数没有限制(或者更确切地说,因为它是流式的,所以您可以在不离开连接的情况下不断获取数据),因此您不必担心如果过度访问会被禁止。
但是,如果在未建立通信的情况下重试多次,则通信可能会停止,因此需要创建用于重新连接、响应监控等的程序。
创建它需要时间,所以这次我将介绍一个涵盖该领域的库。
引入phirehose以轻松使用Streaming API
phirehose是一个与 Twitter Streaming API 交互的 PHP 库。
如果您使用它,有些类将处理从身份验证到连接和数据获取的所有事务,因此只需复制并粘贴示例并填写访问密钥信息,然后从控制台运行它即可获取数据。
该存储库已发布在github上,因此如果您git克隆它,您可以立即使用它。
# git clone https://github.com:fennb/phirehose.git 到项目内的目录中
就这些了,所以我想介绍一些与 Streaming API 端点相对应的更多类。
公共直播
Public Streams 是一个从整个 Twitter 时间线检索数据的 API。
有两个端点。
POST 状态/过滤器
POST statuses/filter是使用 POST 方法定义的,但它也读取 GET 参数,使其成为一个设计相对良好的 API。
根据 Twitter 用户 ID、关键字和位置信息缩小要阅读的推文范围。
关注(用户 ID)
要过滤的用户 ID。
在 phirehose 中,将其作为数组从 setFollow() 方法传递。
轨道(关键字)
要过滤的关键字。
在 phirehose 中,将其作为数组从 setTrack() 方法传递。
位置(位置信息)
要过滤的位置信息。
选择基于由左下和右上角两个点表示的矩形,因此如果您尝试仅在日本境内进行过滤,则需要连接多条位置信息。
在 phirehose 中,将其作为数组从 setLocations() 方法传递。
此外,它应该始终是一个二维数组
- 左下经度(最西南)
- 左下纬度(最西南)
- 右上角经度(东北)
- 右上(最东北)纬度
您将传递一个数组,其值是包含顺序为 的值的数组。
因此,通过设置多个矩形,可以创建覆盖日本的范围。
此外,还可以仅针对多个大城市进行过滤。
获取状态/样本
GET statuses/sample是一个 API,可以从 Twitter 上的所有推文中随机提取少量样本。
看起来数据量也就1%左右,但是看起来还是有很大的动力,所以要小心。
这里没有选项。
用户流
这是一个针对单个用户并检索时间线、个人资料更新、事件等的 API。
如果您通过此 API 为未指定数量的用户帐户进行流式传输,则您可能会受到来自同一 IP 地址的连接的限制,因此我们将考虑另一种选择。
User Streams API 还提供包含对目标用户的回复、转发等的选项。
* 在phirehose中,track选项有专门的方法,但是with和replies好像没有专门的方法,不过由于我这次没有使用User Streams API,所以没有研究设置方法,所以我就不提了((这只是Twitter提供的文档的翻译)。
with(处理用户关注的另一个帐户)
默认情况下,“with=followings”表示流将包含有关用户及其关注的用户的数据。
如果指定“with=user”,则仅包含帐户用户的数据。
回复(回复的处理)
默认情况下,只会传输来自彼此关注者的用户的回复,但通过设置“replies=all”,您可以接收所有回复。
跟踪(按关键字添加的推文)
通过设置轨道,您还可以流式传输与关键字匹配的推文。
网站流
Site Stream API 目前处于测试阶段(已经有一段时间了),但与 User Streams API 不同,后者在一个流中传输多个用户的时间线。
由于它是测试版,因此存在各种限制,但如下。我有一天会成为 GA 吗?
- 单个连接允许您访问 100 个用户的时间线(还可以分发个人资料更新等数据)。Control Streams增加多达 1000 个用户
- 高达 25 个连接/秒。您需要实施指数退避,以防因调用过多等原因而遇到错误。
- 如果你打开的连接超过1000个左右,你就需要与Twitter Platform团队协调测试和启动(我查了Twitter Platform Team是什么意思,但我不知道。它是Twitter内部的一个团队吗?(这是一个翻译非常有问题,所以请持保留态度。)
可获得的JSON数据示例
获取的 JSON 数据示例如下所示。
每项数据比较大,可以采集多种数据。
array(25) { ["created_at"]=> string(30) "Mon Mar 27 04:41:07 +0000 2017" ["id"]=> float(0.000000000000E+17) ["id_str"]=>字符串(18)“0000000000000000”[“文本”]=>字符串(78)“xxxxxxxxxxxxxxxx”[“源”]=>字符串(82)“xxxxxxxxxxxxxxxx”[“截断”]=>布尔(false)[“in_reply_to_status_id” ]=> NULL ["in_reply_to_status_id_str"]=> NULL ["in_reply_to_user_id"]=> NULL ["in_reply_to_user_id_str"]=> NULL ["in_reply_to_screen_name"]=> NULL ["user"]=> 数组(38) { [" id"]=> 浮点数(0000000000) ["id_str"]=> 字符串(10) "0000000000" ["name"]=> 字符串(13) "xxx xxx" ["screen_name"]=> 字符串(8) " xxxxxxxx” [“位置”]=> 字符串(27) “xxxxxxxxxxxxxxx” [“url”]=> NULL [“描述”]=> 字符串(135) “xxxxxxxxxx” [“受保护”]=> 布尔(假) [ "已验证"]=> bool(false) ["followers_count"]=> int(669) ["friends_count"]=> int(533) ["listed_count"]=> int(1) ["favourites_count"]=> int(2267) ["statuses_count"]=> int(3727) ["created_at"]=> string(30) "Fri Mar 20 09:23:52 +0000 2015" ["utc_offset"]=> NULL ["time_zone "]=> NULL ["geo_enabled"]=> bool(true) ["lang"]=> string(2) "ja" ["contributors_enabled"]=> bool(false) ["is_translator"]=> bool(假)[“profile_background_color”] =>字符串(6)“C0DEED”[“profile_background_image_url”]=>字符串(48)“xxxxxxxxxxxx”[“profile_background_image_url_https”]=>字符串(49)“xxxxxxxxxxxx”[“profile_background_tile”]= > bool(false) ["profile_link_color"]=> 字符串(6) "1DA1F2" ["profile_sidebar_border_color"]=> 字符串(6) "C0DEED" ["profile_sidebar_fill_color"]=> 字符串(6) "DDEEF6" ["profile_text_color "]=> 字符串(6) "333333" ["profile_use_background_image"]=> 布尔(true) ["profile_image_url"]=> 字符串(74) "xxxxxxxxxx" ["profile_image_url_https"]=> 字符串(75) "xxxxxxxxxx" [“profile_banner_url”]=> 字符串(59)“xxxxxxxxxx” [“default_profile”]=> bool(true) [“default_profile_image”]=> bool(false) [“following”]=> NULL [“follow_request_sent”]= > NULL [“通知”]=> NULL } [“地理”]=> NULL [“坐标”]=> NULL [“地点”]=> 数组(9) { [“id”]=> 字符串(16) “5ab538af7e3d614b”[“url”]=>字符串(56)“https://api.twitter.com/1.1/geo/id/5ab538af7e3d614b.json”[“place_type”]=>字符串(4)“城市”[ "name"]=> string(16) "横滨市旭区" ["full_name"]=> string(23) "假名横滨市旭区" ["country_code"]=> string(2) "JP" ["国家"]=> 字符串(6) "日本" ["bounding_box"]=> 数组(2) { ["类型"]=> 字符串(7) "多边形" ["坐标"]=> 数组(1) { [0]=> 数组(4) { [0]=> 数组(2) { [0]=> 浮点(139.488892) [1]=> 浮点(35.440878) } [1]=> 数组(2) { [ 0]=> 浮点(139.488892) [1]=> 浮点(35.506665) } [2]=> 数组(2) { [0]=> 浮点(139.570535) [1]=> 浮点(35.506665) } [3] => 数组(2) { [0]=> 浮点(139.570535) [1]=> 浮点(35.440878) } } } } ["属性"]=> 数组(0) { } } ["贡献者"]=> NULL ["is_quote_status"]=> bool(false) ["retweet_count"]=> int(0) ["favorite_count"]=> int(0) ["entities"]=> array(4) { ["hashtags" ]=> 数组(0) { } ["urls"]=> 数组(0) { } ["user_mentions"]=> 数组(0) { } ["符号"]=> 数组(0) { } } [ "最喜欢的"]=> bool(false) ["转推"]=> bool(false) ["filter_level"]=> string(3) "low" ["lang"]=> string(2) "ja" [ "timestamp_ms"]=> 字符串(13) "1490589667759" }
概括
过去,有很多东西必须在 Twitter API 中实现,比如实现 OAuth 身份验证,这是一个痛苦的事情,现在已经变得司空见惯,但加上访问令牌的处理等,却花了不到 5 个时间然而,无论您多么担心,有一个库可以让您在短短一个小时内获得满意的数据,这真是太好了。
就是这样。