Использование Twython для отправки твита, twitter api error
Я пытаюсь сделать python для отправки твита для меня, используя Twython, но по какой-то причине все, что я пытаюсь, не работает.
Я следил за Twython README, но все еще не смог добиться того, что хочу.
Ниже приведен мой последний код:
from twython import Twython, TwythonError
APP_KEY = "KEYHERE"
APP_SECRET = "SECRETHERE"
twitter = Twython(APP_KEY, APP_SECRET)
auth = twitter.get_authentication_tokens()
OAUTH_TOKEN = auth['oauth_token']
OAUTH_TOKEN_SECRET = auth['oauth_token_secret']
twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
try:
twitter.update_status(status='See how easy this was?')
except TwythonError as e:
print e
При запуске вышеуказанного кода я получаю следующую ошибку трассировки:
Twitter API returned a 401 (Unauthorized), Invalid or expired token
Кто-нибудь знает, что я делаю неправильно, и что еще важнее, как я могу это исправить?
У меня нет достаточного количества баллов за щедрость, но я очень благодарен за помощь!
Заранее спасибо
изменить
Traceback (most recent call last):
File "C:\testtweet.py", line 20, in <module>
final_step = twitter.get_authorized_tokens(oauth_verifier)
File "C:\Python27\lib\site-packages\twython\api.py", line 313, in get_authorized_tokens
raise TwythonError('Unable to decode authorized tokens.')
TwythonError: Unable to decode authorized tokens.
Вышеприведенная трассировка получена из кода, предоставленного @justhalf
Спасибо SMNALLY
Ответы
Ответ 1
Существует гораздо более простой способ обновить сообщение, а не способ, которым показывает Twython
. Это займет больше работы на вашем консольном пространстве API, поэтому позвольте мне начать.
-
Во-первых, вам нужно будет перейти на страницу apps. После того, как вы выбрали приложение, которое вы используете прямо сейчас, взгляните на страницу, которую вы указали. По умолчанию вы должны находиться на вкладке Подробнее. ![enter image description here]()
-
Теперь, когда вы находитесь там, где вы должны быть, нажмите вкладку Настройки рядом с вкладкой Подробнее, как показано выше.
-
После этого прокрутите страницу вниз, пока не увидите следующее:
![enter image description here]()
-
Выберите опцию, как показано выше. Теперь, после того как вы выбрали опцию прокрутки вниз, пока не увидите синюю кнопку с надписью Обновить настройки этого твиттера.
-
Теперь вернитесь на вкладку Подробнее. Идите в нижнюю часть и создайте необходимые маркеры, обратите внимание, что вам может потребоваться несколько раз щелкнуть по кнопкам, чтобы заставить его работать (также убедитесь, что ваш уровень доступа - это Чтение, запись и прямые сообщения, когда токен генерируется):
![enter image description here]()
- Теперь у вас есть все необходимое для подключения и публикации в вашем аккаунте twitter. У вас есть
Consumer key
и Consumer Secret
, Access token
и Access token secret
. У вас есть все, что вам нужно.
Хорошо, теперь перейдите к редактору кода и напишите следующий код котельной плиты (эти клавиши не будут работать, я просто избавился от приложения, так что не взломать здесь: P Я дал им просто указание от длины ключей, которые вы должны ожидать):
from twython import Twython
APP_KEY = '' # Customer Key here
APP_SECRET = '' # Customer secret here
OAUTH_TOKEN = '1936951807-z5bBNING8P1TU2onWvJh5dh8hoYlYAmNOaAx2OX' # Access Token here
OAUTH_TOKEN_SECRET = 'QWJEZ7ridSeZGdxJELSBk7mupCpMA9q9sLCou5ywg' # Access Token Secret here
twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
twitter.update_status(status="Hello from Python! :D")
После этого проверьте свой твиттер, вы должны увидеть новый твит, говорящий "Hello from Python!: D".
Ответ 2
Попробуем разобраться, что пошло не так.
Я замечаю это в документации:
Теперь, когда у вас есть oauth_verifier
, хранящийся в переменной, вам нужно создать новый экземпляр Twython и захватить конечные токены пользователя
И код ниже:
twitter = Twython(APP_KEY, APP_SECRET,
OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
final_step = twitter.get_authorized_tokens(oauth_verifier)
Итак, кажется, что вы пропустили final_step
?
Затем после этого (из документации):
После того, как у вас есть конечные токены пользователей, сохраните их в базе данных для последующего использования!:
OAUTH_TOKEN = final_step['oauth_token']
OAUTH_TOKEN_SECERT = final_step['oauth_token_secret']
После этого, я думаю, вам нужно будет создать еще один новый экземпляр Twython с последними OAUTH_TOKEN
и OAUTH_TOKEN_SECRET
. Таким образом, полный код будет примерно таким, я полагаю:
from twython import Twython, TwythonError
import requests
APP_KEY = "KEYHERE"
APP_SECRET = "SECRETHERE"
twitter = Twython(APP_KEY, APP_SECRET)
auth = twitter.get_authentication_tokens()
OAUTH_TOKEN = auth['oauth_token']
OAUTH_TOKEN_SECRET = auth['oauth_token_secret']
twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
### This is the part you're missing ###
oauth_verifier_url = auth['auth_url']
oauth_verifier = requests.get(oauth_verifier_url)
# Getting the FINAL authentication tokens
final_step = twitter.get_authorized_tokens(oauth_verifier)
OAUTH_TOKEN = final_step['oauth_token']
OAUTH_TOKEN_SECRET = auth['oauth_token_secret']
twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)
### Up until this line ###
try:
twitter.update_status(status='See how easy this was?')
except TwythonError as e:
print e
У меня нет ключа для приложения Twitter, поэтому я не могу его попробовать.
Но я думаю, этого должно быть достаточно, чтобы решить вашу проблему. Надеюсь, это поможет. =)
Обратите внимание, что я использовал пакет requests
из Python.
Ответ 3
причина, по которой возвращается код Twitter API returned a 401 (Unauthorized), Invalid or expired token
, требуется oauth_verifier после вызова get_authentication_tokens()
Попробуйте выполнить thsse шаги для успешного вызова твиттера и получите oauth_verifier
from twython import Twython, TwythonError
twitter = Twython(APP_KEY, APP_SECRET)
auth = twitter.get_authorization_tokens(callback_url='http://google.com')
oauth_token = auth['oauth_token']
oauth_token_secret = auth['oauth_token_secret']
print auth
print auth['auth_url']
auth ['auth_url'] напечатает ответ, например:
https://api.twitter.com/oauth/authenticate?oauth_token=xxxxxxxxx
перейдите к этому URL-адресу, чтобы авторизовать свое приложение
![enter image description here]()
После авторизации приложения он отправит клиента на ваш callback_url
callback_url
будет добавлен с помощью oauth_verifier
что-то вроде http://google.com/?oauth_verifier=xxxxxx&oauth_token=xxxxxx
в зависимости от используемой веб-страницы вам нужно GET ответ для oauth_verifier
Теперь создайте новый экземпляр Twython
twitter = Twython(APP_KEY, APP_SECRET, oauth_token, oauth_token_secret)
final_tokens = twitter.get_authorized_tokens(oauth_verifier)
print final_tokens
# these are the keys you will use to make calls on the users behalf from here on forward
f_oauth_token = final_tokens['oauth_token']
f_oauth_token_secret = final_tokens['oauth_token_secret']
Обновление статуса Twitter:
twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN=f_oauth_token, OAUTH_TOKEN_SECRET=f_oauth_token_secret)
try:
twitter.update_status(status='See how easy this was?')
except TwythonError as e:
print e
И сделайте обновить настройки приложения twitter, как указано @Games Brainiac
Ответ 4
Я добавляю к следующему обсуждению, что соединение с другим сервером также может препятствовать соединению в потоке api. Например, у меня был Rserve() открытый и продолжал получать ошибку 401, но когда я убил Rserve в моей командной строке, авторизация была предоставлена ...
Ответ 5
Обычно, если вы хотите обновить статус с помощью своего приложения, вам необходимо пройти аутентификацию с использованием аутентификации OAuth1.1 (которая называется аутентификацией пользователя), в отличие от аутентификации только для приложений.
К сожалению, для любого, кто создает приложение Twitter, для этого требуется много дополнительного кода (где приложение auth требует только 3 или 4 строки кода).
Некоторое время назад я действительно разместил полный код для работы с OAuth1.1 с использованием Flask и Twython (без обработки ошибок, вы можете справиться с этим любым способом) здесь. Это решение использует файлы сеанса для обработки токенов, а затем очищает сеанс при выходе из системы. (код может быть не идеальным и, вероятно, может быть улучшен - я довольно начинающий программист)