【问题标题】:Is it possible to know the country from which a particular tweet originated?是否有可能知道特定推文的来源国?
【发布时间】:2019-08-23 06:49:33
【问题描述】:

我正在解决一个问题,该问题需要我知道推文的来源国。我不需要更小的粒度。只是国家会这样做。我已经有了这些推文。是否可以从 twitter API 获取这些信息?

Twitter API 提到:

地点:当存在时,表示推文与地点相关联(但不一定源自)。

坐标:表示用户或客户端应用程序报告的此推文的地理位置。内部坐标数组格式为 geoJSON(先经度,后纬度)。

一些搜索表明,地方信息可能不是执行此操作的最佳方式。我应该改用坐标吗?它们准确吗?使用它有什么“陷阱”吗?

【问题讨论】:

  • Tweet JSON 对象中是否有任何类型的位置或坐标数据?如果没有,就没有办法得出这个。
  • 其中一些确实如此。但是通过粗略的目视检查,我可以看到它们中的大多数都设置为“null”。是因为这些推文没有地理标记吗?
  • 是的,这就是原因

标签: twitter


【解决方案1】:

我使用 locations 参数从边界框获取推文。这将返回普通推文和带有地理标记的推文。

请注意,如果坐标字段已填充或坐标为空但地点已填充,则流将返回推文。如果坐标字段不为空,它表示地球表面上推文起源的确切位置(地理标记推文)。如果坐标字段为空,但显示了地点字段,它将显示代表用户在该普通推文中标记的地点的边界框/多边形的坐标(范围从博物馆到城市/国家)。 Twitter 还能够从 IP 地址中检索一些位置信息(尽管粒度较低,例如城市级别)。详情请见https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/basic-stream-parameters

l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
stream.filter(locations = [144.9385,-37.8246,144.9761,-37.7955])

编辑:当您使用 Streaming API 将一组推文提取到 .txt 文件中时,您可以使用以下代码。我使用了一个名为 Tweet Parser 的 Python 包。

import pandas as pd
from tweet_parser.tweet import Tweet
from tweet_parser.tweet_parser_errors import NotATweetError
import fileinput
import json

#remove all blank lines
with open('test.txt') as infile, open('test.json', 'w') as outfile:
    for line in infile:
        if not line.strip(): continue  # skip the empty line
        outfile.write(line)  # non-empty line. Write it to output

df  = pd.DataFrame(columns=['DateTime','user_id','country','tweet'])
for line in fileinput.FileInput("test.json"):
    try:
        tweet_dict = json.loads(line)
        tweet = Tweet(tweet_dict)
    except (json.JSONDecodeError,NotATweetError):
        pass
    df= df.append({'DateTime':tweet.created_at_datetime,'user_id':tweet.user_id,'country':tweet_dict['place']['country'],'tweet':tweet.text},ignore_index=True)

【讨论】:

  • 感谢您的回答,但这不是我想要的。我已经有了这些推文。在这些推文中,我需要过滤掉来自特定国家的推文。你认为你可以分享一些信息吗?如果可以的话?
  • 抱歉,我没能解决这个问题。我正在根据我检索到的一组推文编辑我的答案。希望就够了。
猜你喜欢
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多