Прикручивая Twitter oAuth посмотрите на часы

Твитер, твитер, что-ж ты вьешься над моею головой...

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

Так как мой блог работает на движке Wordpress, то самый простой способ — поставить готовый плагин. Именно так я и поступил. Первый опробованный мной плагин WP Twitter Connect ( http://wordpress.org/extend/plugins/wp-twitter-connect/ ) не заработал. Решил сильно не мудрить и поискать что-то еще, в результате чего был найден второй плагин Simple Twitter Connect ( http://wordpress.org/extend/plugins/simple-twitter-connect/ ), на котором я в итоге и остановился, хотя и сразу не заработал.

Забегая вперед, замечу что мне в нем понравилась модульная структура, которая позволяет гранулярно подключить нужные мне фичи к базовому плагину. Кроме того, автор Simple Twitter Connect плагина также опубликовал подобный плагин для facebook ( http://wordpress.org/extend/plugins/simple-facebook-connect/ ) и он заработал out of the box.

Что нас не убивает, делает нас только крепче...

Второй плагин, как я уже сказал, у меня сразу не заработал и симптомы были таки-ми же как и у первого: Screenshot2011-01-08at16.45.05-2011-01-8-16-24.png

Делать нечего, нужно копать. Расчехлил редактор с поддержкой sftp, зашел в папку с плагином и принялся die(var_dump($xyz)); по коду переставлять, что позволило сузить скоуп проблемы до простого сообщения от api твиттера:

Failed to validate oauth signature and token

которое приходило в ответ на запрос: [code] twitter.com/oauth/requesttoken?oauthconsumerkey=mnogoBukf
&oauth
nonce=o5mnogoBokff &oauthsignature=4oJuW6bZv52VVl%2BbBE78Au0G4oI%3D &oauthsignaturemethod=HMAC-SHA1 &oauthtimestamp=1294486445 &oauthversion=1.0a [/code] В общем не нравится твиттеру моя сигнатура, хоть тресни. Посмотрел как она создается — нормально там все, хэш hmacsha1, генерится корректно, версия oauth — актуальная, consumerkey — заботливо скопирован с сайта twitter.com, остался под вопросом лишь параметр oauthtimestamp в котором передается так называемый unix timestamp. Для любопытных - “1294486445” это “Saturday, January 8th 2011, 11:34:05 (GMT)”. Это значение генерится моим сервером и подставляется в запрос. Время используется системное. Рывок в окошко терминала, набираем date, сравниваем с часами на компе — время на сервере отстает от “атомных часов” моего ноута на 32 минуты.

Собственно, всё понятно. Дальнейшие шаги — просто подтверждение того, что при работе с удаленными системами, в которых используется привязка к времени, необходимо что бы все элементы системы работали в одном и том же времени (NB: речь не идет о разных тайм зонах).

Проверяем, что дэмон синхронизации поднят и работает:

[root@fox simple-twitter-connect]# /etc/init.d/ntpd status
ntpd is stopped

Упсс, нет такой буквы... Поднимаем!

[root@fox simple-twitter-connect]# /etc/init.d/ntpd start
Starting ntpd:                                             [  OK  ]

Проверяем время и наслаждаемся работающей twitter-авторизацией!