如何用Golang的Anaconda库抓取含指定URL模式的推特流?
问题根因说明
- SiteStream接口返回404的原因:Twitter官方早在2018年就完全下线了Site Streams、User Streams两类接口,Anaconda库中保留的相关方法属于未移除的废弃接口,完全无法使用,无需再尝试调用。
- PublicStreamFilter的track参数直接填目标URL失效的原因:流式API的track参数默认仅匹配推文正文文本内容,不会自动解析t.co短链对应的原始地址,因此直接填写目标域名无法命中结果。
可行解决方案
方案1:使用API原生URL匹配规则(推荐)
Twitter流式过滤API原生支持url:运算符,可直接匹配短链背后的展开URL域名/路径,无需本地二次处理:
- 构造track参数时,将需要匹配的URL模式按
url:目标域名格式编写,例如要匹配所有包含google.com链接的推文,参数填写url:google.com即可 - 继续使用
PublicStreamFilter方法发起请求,示例代码如下:
import "net/url" // 构造请求参数 v := url.Values{} v.Set("track", "url:google.com") // 启动过滤流 stream := api.PublicStreamFilter(v)
API后台会自动匹配所有展开URL包含对应规则的推文,直接返回符合要求的结果。
方案2:本地二次过滤
如果你的API权限不支持url:运算符,可通过拉取完整推文实体后本地过滤实现:
- 调用
PublicStreamFilter时可先搭配其他相关关键词缩小流数据范围,降低本地处理压力 - 接收每条推文后,遍历
Entities.Urls数组中的Expanded_url字段,匹配是否包含目标域名,示例过滤逻辑:
import "strings" func hasTargetUrl(tweet anaconda.Tweet, targetDomain string) bool { for _, u := range tweet.Entities.Urls { if strings.Contains(u.Expanded_url, targetDomain) { return true } } return false }
匹配成功的推文再做后续留存处理即可。
内容的提问来源于stack exchange,提问作者Harsh8V
相关产品推荐
相关产品推荐

