在 Java 中使用 SQL 根据平台使用情况搜索 Twitter 用户





5.00/5 (2投票s)
最近,Java 社区提出一个问题,如何提取未关注特定账号但又发布过特定内容的用户。在本文中,我们将介绍如何使用 CData Twitter JDBC 驱动来回答这个问题。
关于 CData Twitter JDBC 驱动
CData Twitter JDBC 驱动允许用户使用标准的 SQL 语句处理来自 Twitter 的数据。有了 Twitter 驱动,您就可以轻松地在 Java 应用程序以及支持 JDBC 标准的 BI、报告和 ETL 工具中连接到 Twitter。CData 驱动支持处理推文、私信、关注者、回复、列表等。
下载并安装 Twitter JDBC 驱动
首先,下载 Twitter JDBC 驱动:(点击此处获取 30 天免费试用)。按照安装程序中的说明完成安装。
在 Java IDE 中使用 JDBC 连接到 Twitter
选择您喜欢的 Java IDE(Eclipse、IntelliJ、NetBeans 等)或支持 JDBC 的 Java 工具,并使用原生 JDBC 支持创建到 Twitter 的连接。本文中,我们使用 NetBeans。
- 注册新的 JDBC 驱动程序。
- 驱动程序:驱动程序 JAR 文件(通常位于 C:\Program Files\CData\CData JDBC Driver for Twitter\lib)
- 驱动程序类:cdata.jdbc.twitter.TwitterDriver
- 名称:任意(我们使用 CDataTwitter)
- 点击“确定”。
- 创建一个新的连接。选择新注册的驱动程序,并在 JDBC URL 中输入身份验证参数。
例如:
jdbc:twitter:InitiateOAuth=GETANDREFRESH;...;
Twitter JDBC 驱动使用 OAuth 进行身份验证。要了解更多信息,请参阅 Twitter JDBC 驱动帮助文档。
- 在测试连接后,点击“完成”以建立连接并开始查询 Twitter。
查询 Twitter
为了查询我们想要的 Twitter 用户列表,我们需要创建一个 SQL 查询来表示我们要解决的问题。我们将首先把问题分解成不同的部分,然后组合这些单独的查询来找到我们想要的用户。
查找未关注您的用户
Twitter JDBC 驱动公开了一个 Follower 视图,该视图列出了关注您账号的 Twitter 账号。其中有一个 `Following` 列,它是一个布尔值,可用于查找您已关注但未回关您的账号列表。
SELECT ID, Screen_Name, Following FROM Followers WHERE Following = 'false';
查找包含特定内容的用户
在 Tweets 表中,您可以获取推文记录。使用名为 `SearchTerms` 的伪列来获取包含特定字符串的推文。由于会搜索所有推文,因此必须仅提取包含目标字符字符串的推文(以避免触及 Twitter API 的速率限制)。
SELECT From_User_ID, From_User_Name, Text FROM Tweets WHERE SearchTerms = 'JDBC'
如果您的查询仍然超出速率限制,请在 SQL 语句中添加 `LIMIT 10000` 来减少结果数量。
组合 SQL 查询
一旦我们解析了问题的各个部分,就可以将它们组合成一个单一的查询。下面,我们使用一个子查询来查找我们关注者中包含字符串“JDBC”的所有推文。然后,从结果中选择那些未关注我们账号的账户。
SELECT * FROM ( SELECT Tweets.From_User_ID, Tweets.From_User_Name, Tweets.From_User_Screen_Name, Followers.Following, Tweets.Text FROM Tweets LEFT OUTER JOIN Followers ON Tweets.From_User_ID = Followers.ID WHERE Tweets.SearchTerms = 'JDBC' ) WHERE Following = false;
其他限制
如上所述,Tweets 表中的 `SearchTerms` 非常有用,因为它允许您仅从大量推文中提取特定的字符字符串。如果您在 `Text` 列(给定推文的主文本)中放置了一个 `LIKE` 条件,API 将会查询整个时间线,立即触及 API 速率限制。`Hashtags` 列也同样如此。作为一种解决方法,请在查询中写入 LIMIT,然后按 `Text` 和 `Hashtags` 列进一步过滤。
`SearchTerms` 伪列的一个限制是,您只能获取最新的推文。这是 Twitter API 的一个限制。默认情况下,Twitter 只支持返回最多 7 天的搜索结果。然而,拥有高级账户的客户可以通过运行 30 天或完整归档搜索来检索更早的推文。
为了帮助限制您的结果,请搜索在短时间内相关的内容,例如特定事件的标签或短语。否则,请设置一个程序,每 7 天查询一次 Twitter 以获得完整的结果。
注意:`SearchTerms` 不能与 `User_Id` 等列结合使用。要解决此限制,请使用 `OUTER JOIN` 来合并结果集。
进一步查询
如果您想根据关注者 ID 查看不同的结果,可以使用以下查询
SELECT * FROM ( SELECT Tweets.From_User_ID, Tweets.From_User_Name, Tweets.From_User_Screen_Name, Followers.Following FROM Tweets LEFT OUTER JOIN Followers ON Tweets.From_User_ID = Followers.ID WHERE Tweets.SearchTerms = 'JDBC' GROUP BY Tweets.From_User_ID ) WHERE Following = false ;
摘要
通过 CData Twitter JDBC 驱动,您可以使用 SQL 来处理 Twitter 数据。下载免费的 30 天试用版,立即开始处理您的 Twitter 数据。要了解更多关于使用 SQL 访问 150 多个其他 SaaS、大数据和 NoSQL 数据源的信息,请探索我们的 JDBC 驱动程序。