[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

[大阪/横滨/德岛] 寻找基础设施/服务器端工程师!

【超过500家企业部署】AWS搭建、运维、监控服务

【超过500家企业部署】AWS搭建、运维、监控服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

【CentOS的后继者】AlmaLinux OS服务器搭建/迁移服务

[仅适用于 WordPress] 云服务器“Web Speed”

[仅适用于 WordPress] 云服务器“Web Speed”

[便宜]网站安全自动诊断“快速扫描仪”

[便宜]网站安全自动诊断“快速扫描仪”

[预约系统开发] EDISONE定制开发服务

[预约系统开发] EDISONE定制开发服务

[注册100个URL 0日元] 网站监控服务“Appmill”

[注册100个URL 0日元] 网站监控服务“Appmill”

【兼容200多个国家】全球eSIM“超越SIM”

【兼容200多个国家】全球eSIM“超越SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

[如果您在中国旅行、出差或驻扎]中国SIM服务“Choco SIM”

【全球专属服务】Beyond北美及中国MSP

【全球专属服务】Beyond北美及中国MSP

[YouTube]超越官方频道“美由丸频道”

[YouTube]超越官方频道“美由丸频道”

引入 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() 方法传递。

此外,它应该始终是一个二维数组

  1. 左下经度(最西南)
  2. 左下纬度(最西南)
  3. 右上角经度(东北)
  4. 右上(最东北)纬度

您将传递一个数组,其值是包含顺序为 的值的数组。
因此,通过设置多个矩形,可以创建覆盖日本的范围。

此外,还可以仅针对多个大城市进行过滤。

 

获取状态/样本

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 个时间然而,无论您多么担心,有一个库可以让您在短短一个小时内获得满意的数据,这真是太好了。

就是这样。

如果您觉得这篇文章有帮助,请点赞!
0
加载中...
0 票,平均:0.00 / 10
1,150
X Facebook 哈特纳书签 口袋
[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

[2025.6.30 Amazon Linux 2 支持结束] Amazon Linux 服务器迁移解决方案

写这篇文章的人

关于作者

万代洋一

我的主要工作是为社交游戏开发 Web API,但我也很幸运能够做很多其他工作,包括营销。
此外,我在 Beyond 中的肖像权被视为 CC0。