Почему эти два API (twitter geo / search API) возвращают разные наборы результатов?

Я получаю твиты из определенного региона, но получаю очень разные наборы результатов. Первый метод, задавая долготу и широту в пределах заданного радиуса. Это долгота и широта в пределах города (Лахор, ПК) и радиус рисования 5 км. 5 км - очень маленькая часть этого города. К этому времени я получил около 60 000 твитов за один день.

Метод1

import tweepy
consumer_key= 'xxxxxxxxxxxxxx'
consumer_secret= 'xxxxxxxxxxxxx'
access_token='xxxxxxxxxxxxxxx'
access_token_secret='xxxxxxxxxxxxxxxxxxxx'
api = tweepy.API(auth,wait_on_rate_limit = Truewait_on_rate_limit_notify= True)
public_tweets = tweepy.Cursor(api.search, count=100, geocode="31.578871,74.305184,5km",since="2018-06-09",show_user = True,tweet_mode="extended").items()
for tweet in public_tweets:
    print(tweet.full_text)

Второй метод, я использовал API гео-поиска в Твиттере, запросив Лахор, гранулярность = город. Теперь я получаю твиты всего города. но теперь я получаю 1200 твитов только за один день. Я также получил за последние 7 дней и получил только 15 000 твитов. Это очень большая разница в том, что весь город дает мне только 1200 твитов, а небольшая часть того же города дает мне более 60 000 твитов. Я также печатаю идентификатор места, чтобы убедиться, что получаю точные полигоны. Это многоугольники (74.4493870, 31.4512220 74.4493870, 31.6124170 74.2675860, 31.6124170 74.2675860, 31.4512220), и я рисую их на https://www.keene.edu/ для проверки. и да, это точные полигоны города Лахор.

Метод 2

import tweepy
consumer_key= 'xxxxxxxxxxxxxx'
consumer_secret= 'xxxxxxxxxxxxx'
access_token='xxxxxxxxxxxxxxx'
access_token_secret='xxxxxxxxxxxxxxxxxxxx'
api = tweepy.API(auth,wait_on_rate_limit = Truewait_on_rate_limit_notify= True)

places = api.geo_search(query="Lahore", granularity="city")

for place in places:    
    print("placeid:%s" % place)
public_tweets = tweepy.Cursor(api.search, count=100,q="place:%s" % place.id,since="2018-06-09",show_user = True,tweet_mode="extended").items()
for tweet in public_tweets:
    print(tweet.full_text)

А теперь сначала скажите мне, почему существует огромная разница в результатах. Я использую стандартную версию Api.

Во-вторых, расскажите мне, как эти (api) получают твиты. потому что менее 1% твитов имеют геотеги, а также не каждый пользователь в этом профиле указывает точный город и страну. Некоторые пользователи упоминают Марс и Землю и т. Д. Итак, как эти API работают для получения твитов в определенном регионе. либо поиск по радиусу, либо запрос города / страны. Я изучал твиттер-API и твип-документацию, чтобы изучить, как эти API-интерфейсы работают в фоновом режиме для сбора твитов из определенного региона, но я не нашел никаких полезных материалов.


person ahmad iqbal    schedule 09.06.2018    source источник


Ответы (1)


Причина, по которой первый метод дает больше результатов, заключается в том, что если твит не содержит геоинформации, тогда поиск с геокодированием вернется к профилю (как вы уже догадались) и попытается преобразовать его в широту / долготу.

Смотрите документацию здесь:

https://developer.twitter.com/en/docs/tweets/search/guides/standard-operators.html

Геолокация: оператор поиска «рядом» недоступен в API, но есть более точный способ ограничить ваш запрос заданным местоположением, используя параметр геокодирования, указанный в шаблоне «широта, долгота, радиус», например, «37.781157, -122.398720,1mi». При проведении гео-поиска API поиска сначала пытается найти твиты, которые имеют широту / долготу в запрошенном геокоде, а в случае неудачи он попытается найти твиты, созданные пользователями, местоположение профиля которых может быть обратным геокодированием в широта / долгота в запрошенном геокоде, что означает, что можно получать твиты, не содержащие информации о широте и долготе.

С другой стороны, поиск с place_id, похоже, ищет именно это место. Вот основной синтаксис вызова API: https://developer.twitter.com/en/docs/tweets/search/guides/tweets-by-place

Api места работает иначе, чем lat / long в геокодировании. Следующая страница проливает свет на различия между двумя типами данных о местоположении, которые могут быть связаны с твитом:

https://developer.twitter.com/en/docs/tutorials/filtering-tweets-by-location

Информация о местоположении для конкретного твита делится на две общие категории:

Tweets with a specific latitude/longitude “Point” coordinate
Tweets with a Twitter “Place” (see our blog post on Twitter Places: More Context For Your Tweets and our documentation on Twitter

геообъекты для получения дополнительной информации).

...

Твиты с Twitter «Место» содержат многоугольник, состоящий из 4 долготных координат, определяющих общую область («Место»), из которой пользователь публикует твит. Кроме того, у места будет отображаемое имя, тип (например, город, район) и код страны, соответствующие стране, где находится это место, среди других полей.

Также в этом разделе: обратите внимание на множественное использование Place IDs

место:

Отфильтруйте определенные места по их названию или идентификатору. Чтобы найти «Места», связанные с определенной областью, используйте конечную точку Twitter reverse_geocode в REST API. Затем используйте идентификаторы мест, которые вы найдете с оператором place:, чтобы отслеживать твиты, которые содержат указанное конкретное место. Если вы используете название места, а не числовой идентификатор, убедитесь, что вы заключили в кавычки все имена, содержащие пробелы или знаки препинания.

person Asad Iqbal    schedule 12.06.2018