返回介绍

13.2 一次简单的 Twitter REST API 数据拉取

发布于 2024-01-27 21:43:11 字数 3950 浏览 0 评论 0 收藏 0

有了一系列的 key 值,现在可以开始访问 Twitter 的 API 数据了。在这一节中,我们会编写一个简单的脚本,使用一个搜索查询,从 API 拉取数据。这一节中的脚本基于一个由 Twitter 提供的、作为示例的 Python 代码片段(https://dev.twitter.com/oauth/overview/single-user#python)。这份代码使用了 Python OAuth2,OAuth2 是在使用 API 时为了安全地识别和连接而使用的协议。

 当下最好的认证方式是使用 OAuth2。一些 API 可能仍旧在使用 OAuth1。OAuth1 与 OAuth2 在功能上有所不同,并且是一个已经废弃的协议。如果需要使用 OAuth1,你可以使用 Requests-OAuthlib(https://requests-oauthlib.readthedocs.org/en/latest/),同 requests 一起拉取数据。当通过 API 认证时,确保识别哪一个协议正在被使用。如果使用了错误的协议,在尝试连接时,你会收到错误信息。

首先,需要安装 Python OAuth2:

pip install oauth2

打开一个新文件,导入 oauth2,并且为你的 key 变量赋值:

import oauth2
API_KEY = '5Hqg6JTZ0cC89hUThySd5yZcL'
API_SECRET = 'Ncp1oi5tUPbZF19Vdp8Jp8pNHBBfPdXGFtXqoKd6Cqn87xRj0c'
TOKEN_KEY = '3272304896-ZTGUZZ6QsYKtZqXAVMLaJzR8qjrPW22iiu9ko4w'
TOKEN_SECRET = 'nsNY13aPGWdm2QcgOl0qwqs5bwLBZ1iUVS2OE34QsuR4C'

然后添加函数来创建 OAuth 连接:

def oauth_req(url, key, secret, http_method="GET", post_body="",
        http_headers=None):
  consumer = oauth2.Consumer(key=API_KEY, secret=API_SECRET)       ➊
  token = oauth2.Token(key=key, secret=secret)               ➋
  client = oauth2.Client(consumer, token)                ➌
  resp, content = client.request(url, method=http_method,        ➍
                   body=post_body, headers=http_headers)
  return content                             ➎

❶ 创建一个 oauth2 对象的消费者。消费者是 key 的所有者。这行代码给消费者提供 key,这样消费者可以顺利地通过 API 识别。

❷ 将 token 赋值给 oauth2 对象。

❸ 创建客户端,包含消费者和 token。

❹ 使用函数参数 url,通过 OAuth2 客户端执行请求。

❺ 返回从连接接收到的内容。

现在有了一个函数,允许我们连接到 Twitter API。然而,我们需要定义 URL,并且调用函数。搜索 API 文档(https://dev.twitter.com/rest/public/search)告诉我们更多有关想要使用的请求的信息。使用 Web 接口,可以看到,如果搜索#childlabor,最终得到的 URL 是:https://twitter.com/search?q=%23childlabor。文档建议重新格式化 URL,所以最终的 URL 如下:https://api.twitter.com/1.1/search/tweets.json?q=%23childlabor

之后,可以把这个 URL 作为一个变量,并使用之前定义的变量调用函数:

url = 'https://api.twitter.com/1.1/search/tweets.json?q=%23childlabor'
data = oauth_req(url, TOKEN_KEY, TOKEN_SECRET)

print(data)                             ➊

❶ 在最后添加打印语句,这样可以看见输出。

运行脚本时,你应该看到数据打印成一个很长的 JSON 对象。你可能记得 JSON 对象看起来和 Python 字典类似,但是如果使用 print(type(data)) 重新运行脚本,你会发现内容是一个字符串。现在我们可以做以下两件事情中的一件:转化数据为一个字典并开始解析它,或者保存字符串到一个文件,之后再解析。为了继续在脚本中解析数据,在脚本顶部添加 import json。之后,在尾部,使用 json 加载字符串,并且输出它。

data = json.loads(data)
print(type(data))

变量 data 现在会返回一个 Python 字典。如果你想要将数据写入一个文件并且在之后解析它,替换为下面的代码:

with open('tweet_data.json', 'wb') as data_file:
  data_file.write(data)

最后的脚本应该看起来像下面这样:

import oauth2

API_KEY = '5Hqg6JTZ0cC89hUThySd5yZcL'
API_SECRET = 'Ncp1oi5tUPbZF19Vdp8Jp8pNHBBfPdXGFtXqoKd6Cqn87xRj0c'
TOKEN_KEY = '3272304896-ZTGUZZ6QsYKtZqXAVMLaJzR8qjrPW22iiu9ko4w'
TOKEN_SECRET = 'nsNY13aPGWdm2QcgOl0qwqs5bwLBZ1iUVS2OE34QsuR4C'


def oauth_req(url, key, secret, http_method="GET", post_body="",
        http_headers=None):
  consumer = oauth2.Consumer(key=API_KEY, secret=API_SECRET)
  token = oauth2.Token(key=key, secret=secret)
  client = oauth2.Client(consumer, token)
  resp, content = client.request(url, method=http_method,
                   body=post_body, headers=http_headers)
  return content


url = 'https://api.twitter.com/1.1/search/tweets.json?q=%23popeindc'
data = oauth_req(url, TOKEN_KEY, TOKEN_SECRET)

with open("data/hashchildlabor.json", "w") as data_file:
  data_file.write(data)

从这里开始,你可以查看 3.2 节,来解析数据。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文