2016-05-10 4 views
5
tweepy.error.TweepError: [{u'message': u'Invalid or expired token.', u'code': 89}] 

Должны ли быть жестко закодированы ли токены? У меня есть OAuth и токены доступа, жестко закодированные прямо сейчас, но токен, кажется, истекает каждые 24 часа. Что я могу сделать, чтобы обновить токен программно? Могу ли я получить новый токен через Tweepy?Недействительный токен или истек. Запросить новый токен через Tweepy?

Цель моего скрипта - работать каждый день без разрешения. У меня он установлен как cronjob. Я не хочу делать ручную запись.

Я просто использую API на одной учетной записи, моей учетной записи. Таким образом, у меня есть имя пользователя/пароль и т. Д.

Как правило, я получаю токен от нажатия «Создать токен доступа», а затем, когда я вернусь через несколько дней, токен исчез, и кнопка для его создания - снова появляется.

enter image description here

После регенерации и использования его на другой день, это случилось снова! Скриншот: http://i.imgur.com/hhDqLnU.png

+0

Twitter заявляет в своем FAQ OAuth, что они не истекают токены аутентификации. –

+0

@KlausD. Я знаю, разве это не странно? Через день или два токен исчезает. Он сделал это со мной 3 раза. Я не верю, что они говорят правду. Как я могу обрабатывать эту ошибку в любом случае? Я не понимаю, как их утверждение может быть правдой, когда он просто случайно перестает работать? – User

+0

Как вы получаете токен? –

ответ

2

Не уверен, что цель вашего приложения, но ответить на некоторые из ваших вопросов-проблем:

ли маркеры должны быть жестко закодированы?

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

у меня есть OAuth и маркеры доступа жёстко прямо сейчас, но маркер кажется, истекает через каждые 24 часа. Что я могу сделать, чтобы обновить токен ?

Вы не можете использовать ключ API и секрет потребителя, это должно быть сделано вручную. Эта информация должна быть постоянной, на основе https://dev.twitter.com/oauth/overview

токен доступа другая история, вы можете использовать API для запроса один, по-видимому: https://dev.twitter.com/oauth/reference/post/oauth/access_token

POST OAuth/request_token Позволяет Потребитель приложение для получения OAuth Request Token запрашивает авторизацию пользователя. Этот метод выполняет раздел 6.1 потока аутентификации OAuth 1.0. Это настоятельно рекомендуется использовать HTTPS для всех шагов авторизации OAuth. Использования Примечание: только значение ASCII принимается для oauth_nonce

URL ресурса https://api.twitter.com/oauth/request_token

Что касается доступа маркеров истечения:

Как долго маркера доступа в последний раз? В настоящее время мы не используем токены . Ваш токен доступа будет недействительным, если пользователь явно отклонит ваше приложение из своих настроек или если администратор Twitter приостанавливает ваше приложение .Если ваше приложение приостановлено, на вашей странице приложения будет указано примечание , в котором говорится, что оно приостановлено. как за твиттер:

Что делать, если токен доступа у меня становится недействительным? Вы должны планировать, что токен доступа пользователя может стать недействительным в любое время, и вам потребуется повторная авторизация для этого пользователя в том случае, если это произойдет. Обеспечение правильной работы с этой ситуацией является обязательным условием для качества обслуживания пользователей .

Согласно щебечет документации https://dev.twitter.com/oauth/application-only

запрос API содержит недопустимый носитель маркера Использование неправильной или отозвана маркер однонаправленного канала, чтобы сделать запросы API приведет:

HTTP/1.1 401 Несанкционированное Content-Type : application/json; кодировка = UTF-8 Content-Length: 61 ...

{ "ошибки": [{ "сообщение": "Invalid или истек маркер", "код": 89}]}

Может быть это нужно решать на стороне твиттера? Я бы предложил обратиться к ним directyl https://dev.twitter.com/solutions/customer-service

+0

. Для доступа API требуется вход пользователя каждые 24 часа? 'через webform или текстовое поле в GUI'. Я заметил, что вы что-то сказали о шифровании и импорте файла, что может означать, что мне не нужен ввод пользователя? – User

+0

это можно найти здесь: http://stackoverflow.com/questions/7014953/i-need-to-securely-store-a-username-and-password-in-python-what-are-my-options, возможно, вы может описать, какое приложение вы кодируете для использования в будущем. и нет, доступ api не требует ввода пользователем каждые 24 часа. опять же, зависит от ваших потребностей – glls

+0

также, если вы можете предоставить образцы кода того, что вы пытаетесь достичь, и как вы получаете ошибку с помощью tweepy, было бы полезно – glls

0

Вы можете получить свой токен доступа, используя код ниже. Я использовал configparser для хранения моей конфигурации. Как только у вас есть токен, он не истекает.

if not config['APP']['AUTH_SECRET'] or not config['APP']['AUTH_TOKEN']: 
    try: 
     redirect_url = auth.get_authorization_url() 
     print redirect_url 
    except tweepy.TweepError: 
     print 'Error! Failed to get request token.' 

    # Example w/o callback (desktop) 
    # You even can start browser here 
    verifier = raw_input('Go to URL above, authorize and enter the code:') 

    try: 
     auth.get_access_token(verifier) 
    except tweepy.TweepError: 
     print 'Error! Failed to get access token.' 

    config['APP']['AUTH_SECRET'] = auth.access_token_secret 
    config['APP']['AUTH_TOKEN'] = auth.access_token 
    with open(CONFIG_FILE,'w') as configfile: 
     config.write(configfile) 
else: 
    auth.set_access_token(config['APP']['AUTH_TOKEN'], config['APP']['AUTH_SECRET']) 
+0

Для этого требуется ручная запись пользователя, но это cronjob побежал в полночь. – User

+0

Ручная запись требует только в первый раз – andjelx

Смежные вопросы