Как исправить значение индекса 1 вне диапазона.Не удается получить переменную для правильного прохождения через функцию получения статуса в твиттере - PullRequest
0 голосов
/ 28 апреля 2019

Добавленная переменная не работает со статусом get для получения текстов твитов


У меня есть список идентификаторов твитов, вероятно, около 50 000 в файле excel на моем компьютере.Я хочу создать фрагмент кода, который позволит мне извлечь текст из твитов, чтобы я мог затем проанализировать ...

Я создал переменную 'tweetref' для хранения идентификаторов твитов, которые я могу передатьчтобы получить статус и т.д., чтобы получить текст твита.Мне сказали, что многие из этих твитов могут больше не существовать, и я не могу сказать, какой из идентификаторов, поэтому я сделал «пропуск» на исключение, надеясь проигнорировать все ошибки и просто получить те, которые работают.Использование firehose api для сбора данных слишком дорого для меня.

Он не выдавал никакого текста, даже если вручную заменить tweetref в 'tweet = api.get_status (tweetref)' - с указанным ниже номером (38387433561128960).), печатает реальный твит

Я попытался получить 2-й индекс из ссылки на твит, который привел к «индексу списка вне диапазона» - не уверен, почему, поскольку в списке должно быть более двадцати переменных.Не знаете, что я сделал не так?

РЕДАКТИРОВАТЬ - изменили

"tweetref.append (datalist [30:50])"

на

"tweetref.extend (datalist [30:50])" *

В результате все идентификаторы становятся отдельными элементами в "tweetref" и позволяют мне правильно обращаться к индексам.Однако, несмотря на это, второй цикл for со статусом get по-прежнему не печатает текст из твитов

# Import twitter related packages
import json
import tweepy

from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream

#import request style packages

import requests
from urllib.request import urlopen, Request

# Import excel related packages

import xlrd
import openpyxl

# Import visualisation packages

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

# Store OAuth authentication credentials in relevant variables
access_token = "private"
access_token_secret = "private"

consumer_key = "private"
consumer_secret = "private"

# Pass OAuth details to tweepy's OAuth handler

auth = tweepy.OAuthHandler("private", "private")
auth.set_access_token("private", "private")

api = tweepy.API(auth)

# Read and write to excel

dataFileUrl = R"C:/Users/ebaba/Desktop/algeria1.xlsx"


# Create pandas data frame out of Tweet ID Column of file

data = pd.read_excel(dataFileUrl, usecols = ['Tweet'])

# Convert data frame into a list

datalist = data.values.tolist()

tweetref = []

for t in range (0,20):

    tweetref.append(datalist[30:50])

    print(tweetref[1])

for i in range (0,1):

     try:

        tweet = api.get_status(tweetref)

#38387433561128960 - Example Working Tweet - N.44

        print(tweet.text)

     except:

        pass




Expected result would include the tweet 

'RT @mattseaton: Another fascinating dispatch from inside the pro-democracy movement in Algiers, from Karima Bennoune

which is in the datalist[30:50] range

Actual Result

Traceback (most recent call last):
  File "C:\Users\ebaba\Desktop\example6.py", line 56, in <module>
    print(tweetref[1])
IndexError: list index out of range
[Finished in 16.902s]

1 Ответ

0 голосов
/ 28 апреля 2019

При первом цикле for:

tweetref = []
for t in range (0,20):
    tweetref.append(datalist[30:50])
    print(tweetref[1])

ваш код добавляет список к tweetref, который ранее был пустым.Таким образом, этот список (возможно) из 20 элементов становится элементом 0 из tweetref.Вот почему вы получаете индекс вне диапазона, когда ваш код пытается получить доступ к tweetref[1].

Если вы хотите, чтобы все (возможно) 20 элементов из datalist стали отдельными элементами tweetref, тогда вам нужносделать один из

    tweetref.extend(datalist[30:50])

или

    tweetref += datalist[30:50]

Добавление списка к ранее пустому tweetref приводит к списку с элементом one , который сам является спискомиз (может быть) 20 элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...