В общем что случилось. Пару дней назад в процессе изучения Python и QT решил написать простенькую программку что выводит список последних твиттов. Для реализации воспользовался oauthtwitter (http://code.google.com/p/oauth-python-twitter2/), python-oauth2 (https://github.com/brosner/python-oauth2). Всё получилось, программку написал, и интереса ради ещё и в .exe файл засунул. Ну и вот сегодня запускаю .exe — а ленты то нет! Ну думаю, что-то странное, вроде как правило «работает — не трогай» соблюдено, чему там ломаться? Полез в код, выяснилось что oauthtwitter не удается авторизироваться. Глянул что происходит — oauth возвращает в качестве ответа на запрос к RequestToken ошибку 401. Ну тут я уже в силу своей неграмотности понимать что дальше отказался. Проверил Consumer key и Consumer secret — всё верно, ошибки нет. Даже зарегистрировал новое приложение с новыми ключами — тоже самое. Собственно если делать по примеру к oauth2 без oauthtwitter, то ошибка ровно тажа (что не удивительно, если я верно понял oauthtwitter для доступа oauth2 и использует). Т.е. ещё раз с кодом:
Вау, интересный же поворот событий. Дома имеется нетбук, который получает интернет по Wi-Fi прямо с основного ПК (собственно он и является Wi-Fi точкой). Запустил скрипт на нетбуке, и всё полетело. Вот теперь я действительно чего-то не понимаю. Выходит на основном что-то к Twitter-у не пускает, вирус? Но как же тогда работают другие Twitter клиенты которыми пользуюсь? Теперь даже понятия не имею куда копать… Есть у кого мысли?
Ога, спустя один день тотального не понимания происходящего ответ был найден. Смешно даже. Видите ли у меня часики сегодня перевелись на час назад, что не совпало с временем на серваках твиттера, и оно отказывалось принимать запрос. Выставил верное время, всё заработало.
Теперь в общем то у меня только один вопрос — какого простите хрена? Не верное время может быть выставлено у огромного количества пользователей, и работа программы явно не должна от этого зависеть. Что-то подсказывает точное время надо в интернете узнавать, и как-то это прикручивать, но пока не знаю с какой стороны подступиться.
Кладете на хостинг/себе на сервер крошечный скрипт, выводящий точное время. Затем из программы к нему обращаетесь, и забираете правильное время.
Не знаю, как на питоне, но на PHP скрипт примерно такой:
<?php
// может понадобиться хак, чтобы исправить NOTICE,
// выдаваемые функциями для работы с датами/временем
// date_default_timezone_set(@date_default_timezone_get());
echo time();
?>
Ну я как-то так себе это и представлял. Просто забавно что я сегодня пересмотрел множество библиотек для Twitter-а, и не в одной возможности брать время откуда то ещё не заметил (мб просто слепой). Странно это, более чем, проблема то вполне себе очевидная. Выходит код библиотеки править, но это уже по копаться придется, и честно говоря не сильно бы хотелось (в случае обновления библиотеки — опять под себя код менять?). Надо по рыться, глянуть как там устроено, мб получится просто создать свой наследуемый класс с переопределенным методом.