Ознакомьтесь с нашей политикой обработки персональных данных
23:59 

Твиттер

~[*(O.O)*]~
daring, ambitious, supercilious
Привет!

Я пытаюсь скачать твиты с хештегами на кириллице, но у меня не выходит.
В сети почему-то не могу найти ответа.

Вы не могли бы посмотреть код? Огромное спасибо!

  1. #!/usr/bin/env python
  2. # encoding: utf-8


  3. import tweepy #github.com/tweepy/tweepy
  4. import csv


  5. import sys
  6. # sys.setdefaultencoding() does not exist, here!
  7. reload(sys) # Reload does the trick!
  8. sys.setdefaultencoding('UTF8')




  9. #Twitter API credentials




  10. def get_all_tweets(screen_name):
  11. #Twitter only allows access to a users most recent 3240 tweets with this method


  12. #authorize twitter, initialize tweepy
  13. auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
  14. auth.set_access_token(access_key, access_secret)
  15. api = tweepy.API(auth)


  16. #initialize a list to hold all the tweepy Tweets
  17. alltweets = []


  18. #make initial request for most recent tweets (200 is the maximum allowed count)
  19. new_tweets = api.user_timeline(screen_name = screen_name,count=200)


  20. #save most recent tweets
  21. alltweets.extend(new_tweets)


  22. #save the id of the oldest tweet less one
  23. oldest = alltweets[-1].id - 1


  24. #keep grabbing tweets until there are no tweets left to grab
  25. while len(new_tweets) > 0:
  26. print "getting tweets before %s" % (oldest)


  27. #all subsiquent requests use the max_id param to prevent duplicates
  28. new_tweets = api.user_timeline(screen_name = screen_name,count=200,max_id=oldest)


  29. #save most recent tweets
  30. alltweets.extend(new_tweets)


  31. #update the id of the oldest tweet less one
  32. oldest = alltweets[-1].id - 1


  33. print "...%s tweets downloaded so far" % (len(alltweets))


  34. #transform the tweepy tweets into a 2D array that will populate the csv
  35. outtweets = [[tweet.id_str, tweet.created_at, tweet.text.encode("utf-8"),tweet.retweet_count,tweet.favorite_count] for tweet in alltweets]


  36. #write the csv
  37. with open('%s_tweets.csv' % screen_name, 'wb') as f:
  38. writer = csv.writer(f)
  39. writer.writerow(["id","created_at","text","retweet_count","favorite_count"])
  40. writer.writerows(outtweets)


  41. pass




  42. if __name__ == '__main__':
  43. #pass in the username of the account you want to download
  44. get_all_tweets("гамлета")


@темы: Интернет, Computer Science

Комментарии
2017-05-28 в 00:59 

Reflendey
А что именно не выходит?

Я подправил у себя локально отступы и запустил указав вместо гамлета medvedevrussia.

в итоге создался файл и там есть хештеги на русском, строки вроде
787036800376242176,2016-10-14 21:06:10,RT @Pravitelstvo_RF: Бюджет 2017-2019. Приоритетные проекты. СОБЫТИЯ НЕДЕЛИ #видеоблог #Медведев t.co/7PBdoBWs6m,94,0

2017-05-28 в 18:38 

~[*(O.O)*]~
daring, ambitious, supercilious
Reflendey, вот если я ищу хештег на латинице, все ок. То есть medvedevrussia нормально выходит, а #медведевроссия не выходит.
При том, тут не выходит и в другом скрипте с использованием JSON тоже не выходит(( Кракозябры выходят. А в ДжейСоне вообще пустые твиты прилетают, если по-русски пишутся.

2017-05-28 в 19:45 

Reflendey
Комментарии из какого-то примера?

#pass in the username of the account you want to download
get_all_tweets("гамлета")

Это же название аккаунта в котором надо искать, а не хэштег, и все падает потому что такого аккаунта нет.
И выводится информация по всем постам



Хештеги идут похоже просто как часть текста, то есть tweet.text.encode("utf-8")

Чтобы как-то отфильтровать по конкретному хештегу надо это явно делать.
Например



Но вполне возможно, эта библиотека и лучше умеет работать с хештегами, это просто если исходить из примера, который уже есть

2017-05-31 в 01:31 

~[*(O.O)*]~
daring, ambitious, supercilious
Блин, что это я.

Да. Вот в этом коде не въезжаю, что происходит в итоге.
Вот тут сис заставил код замолчать и искать все. И, когда я его запускаю в пауэр шелле, мне выскакивают кракозябры, которые, подозреваю, хештег по-русски, а потом пустые твиты, если они по-русски. Я понимаю, что или нужно менять параметры в json.loads(data), или в принте назад на decode("utf8", "ignore")?

Спасибо еще раз ><'

читать дальше

2017-05-31 в 02:09 

Reflendey
Все-таки код лучше совать под [/CODE].

Если честно, сейчас я уже не понимаю, что от кода ожидается и в чем именно с ним проблема.
powershell скорее всего использует cp1251.

Если предположить, что данные приходят в utf8, а их надо в cp1251 вывести, то можно просто везде сделать


Если это не поиожет, то можно скоировать крякозябры в www.artlebedev.ru/tools/decoder/ или www.online-decoder.com/ru чтобы определить какая кодировка на самом деле, а какая использовалась для вывода.

sys соответственно в такой ситуации можно не трогать. (хотя теоретически указание там utf8 должно было помочь).

Игнорить ошибки смысла нет, так как

Фактически означает "проигнорь все не ascii символы" (то есть кириллицу в даннои случае)

2017-05-31 в 02:14 

~[*(O.O)*]~
daring, ambitious, supercilious
'это ошибка, которая выползает через полминуты молчания. с английскими хештегами все ок, качаются себе

2017-05-31 в 02:29 

Reflendey
Уж не знаю откуда, но это cp437.

Соответственно код должен сработать

Можно за ним еще decode('utf8') приписать, ну или 'cp1251'. Т.к. иначе используется юникод, и возможно кто-то ожидает, что он будет закодирован в какой-то кодировке, но судя по моим экспериментам локально должно быть без этого.
И аналогичное там где сейчас ignore.

еще есть вариант поставть mingw bash и запускать из под него python, там всегда будет utf8 и скорее всего не будет никаких проблем с кодировкой.

Я например просто удалил все эти декодирования с игнором и из обычного юниксового терминала все ок


2017-05-31 в 22:04 

~[*(O.O)*]~
daring, ambitious, supercilious
спасибо! удалить декодирования помогло :)))

Комментирование для вас недоступно.
Для того, чтобы получить возможность комментировать, авторизуйтесь:
 
РегистрацияЗабыли пароль?

ru_programming

главная