Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Работаем с API Twitter: OAuth, чтение и публикация

by
Difficulty:AdvancedLength:MediumLanguages:
This post is part of a series called Building With the Twitter API.
Building With the Twitter API: Getting Started
Building With the Twitter API: Using Real-Time Streams

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Final product image
What You'll Be Creating

Этот пост является вторым из трех частей серии по использованию API Twitter. Если вы пропустили первую часть, вы можете прочитать ее здесь.

Аутентификация с помощью Twitter через OAuth

Birdcage использует расширение Yii под названием Yii Twitter от Will Wharton, в котором используется библиотека PHP OAuth Twitter с открытым исходным кодом Авраама Уильямса.

Я размещаю расширение в дереве Yii в папке /app/protected/extensions/yiitwitteroauth. В Yii вы настраиваете свойства расширения в файле конфигурации main.php следующим образом:

Обычно я загружал эти настройки из моего Yii .ini-файла, но чтобы упростить настройку Birdcage, я настраиваю ключи приложений из модели UserSettings. Я расширил YiiTwitter.php, чтобы загрузить ключи приложения по умолчанию во время инициализации:

После того, как вы установили и настроили параметры приложения, вам нужно посетить меню «Учетные записи» и нажать «Добавить свою учетную запись Twitter».

Mange Accounts in the Birdcage application

Когда вы нажимаете на значок Twitter, он запускает метод Connect для контроллера Birdcage Twitter:

Это приведет вас обратно в Twitter через OAuth для аутентификации вашей учетной записи Twitter:

Twitter OAuth Challenge Screen

После того, как вы войдете в систему, Twitter попросит вас разрешить приложение Birdcage:

Authorize app for Twitter API

Twitter вернет браузер к вашему обратному URL-адресу, нашему методу обратного вызова контроллера Twitter. Он сохранит ваш токен и секретный токен пользователя Twitter в таблице учетных записей:

Теперь Birdcage готов начинать запросы на получение данных Twitter через API от имени вашей учетной записи пользователя.

Как вы увидите, простой вызов с токенами позволяет получить доступ к API:

Обработка твитов в фоновом режиме

Во второй части нашего урока мы используем REST API Twitter. Часть третья будет об API реального времени на Streaming API:

Using the Twitter REST API

Получение таймингов Twitter

Графики Twitter - это постоянно расширяющийся стек твитов, поэтому активность мониторинга немного сложнее, чем ваш средний REST API. Здесь вы можете узнать больше об уникальных проблемах, которые присутствуют в Twitter. По сути, когда вы пытаетесь прочитать историю хронологии, все время добавляются новые твиты:

The Ever Expanding Twitter Timeline

Twitter предоставляет относительно простой способ управления этим. Вы можете просмотреть код, который выполняет это в модели Twitter Birdcage, getRecentTweets().

Сначала мы просматриваем самый высокий (самый последний) tweet_id в нашей базе данных и возвращаем увеличенное значение:

Затем мы запрашиваем некоторое количество (например, 100) твитов с самого высокого ранее обработанного. API Twitter распознает значение from_id как указатель на место на временной шкале, с которой вы хотите начать извлечение. Он вернет все твиты более поздние, чем from_id. В приведенном ниже примере мы запрашиваем метод REST API statuses/home_timeline. Домашняя временная шкала - это то, что пользователь видит на своем основном экране Twitter.

Также важно проверить, рейт лимиты Twitter'а. Каждому пользовательскому приложению разрешено 180 запросов к домашней временной шкале пользователя за 15-минутное окно, но ограничения по скорости варьируются в зависимости от активности.

Для каждого полученного твита мы вызываем наш метод Parse() для обработки данных и сохранения их в наших различных таблицах базы данных. Во время обработки мы отслеживаем самый старый/самый низкий tweet_id, который мы получили от Twitter:

Метод parse добавляет информацию о пользователе на основе ссылки, а затем сам твит. В модели Parse.php можно увидеть это более подробно.

Затем мы продолжаем запрашивать блоки твитов, используя самый низкий идентификатор из последнего запроса в качестве параметра max_id, который мы отправляем в Twitter. Мы делаем эти последующие запросы, используя first_id из твита, с которого мы начали, и max_id из последнего самого старого твита, который мы получили.

Так, например, когда появляются новые твиты, мы их не видим, потому что Twitter только отправляет нам твиты с самого раннего наивысшего tweet_id (from_id) из нашей базы данных. Нам придется вернуться позже, чтобы получить более новые твиты, которые выше, чем наш начальный from_id.

Важно отметить, что мы не получаем бесконечное количество старых твитов. Twitter возвращает нам только количество твитов, которые мы запрашиваем, которые старше предыдущего низкого ID или (max_id в нашем следующем вызове).

Как только вы привыкнете к этой модели, всё станет довольно просто.

Пока есть команда меню Fetch, которая будет запускать эту операцию, мы также настраиваем задание cron для вызова нашего метода DaemonController каждые пять минут:

Это, в свою очередь, вызывает наш метод getStreams, который выполняет описанные выше операции (обратите внимание, что функции потоков будут описаны в третьей части этой серии):

Конечный результат выглядит примерно так:

Birdcage statuses home_timeline via Twitter API

Однажды я столкнулся с некоторыми проблемами надежности API Twitter. Здесь вы можете проверить статус услуг API Twitter.

Постинг Tweet

Постинг твитов в ваш аккаунт Twitter на самом деле довольно прост. Нам просто нужно использовать метод REST statuses/update . Для выполнения точных подсчетов символов требуется немного больше работы.

Twitter разрешает все URL-адреса в http://t.co ярлыки, поэтому все URL-адреса считаются 20 символами. Мне нужен JavaScript, который бы подсчитывал символы и любой URL-адрес приводил бы к 20 символам, независимо от длины URL-адреса. Я остановился на сочетании решений jQuery и JavaScript, о которых я расскажу ниже.

Я решил создать модель специально для составления твитов под названием Status.php. Это упростило работу с Yii для создания форм для публикации в API.

Когда вы нажимаете Compose в меню Birdcage, он перейдет к методу Compose StatusController:

Это загрузит форму HTML для создания элемента статуса. Проверьте _form.php в /app/protected/views/status/.

Во-первых, я загружу несколько библиотек jQuery и JavaScript-для подсчета количества символов:

Я использовал комбинацию плагина jQuery simpleCountable, twitter-text.js (скрипт для текстовой обработки Twitter на основе JavaScript) и скрипт, который значительно облегчил настройку URL: twitter_count.js.

Следующий код затем создает остаток формы компоновки и активирует скрипты подсчета символов:

Результат выглядит следующим образом:

The Birdcage Compose a Tweet PHP Twitter API Example

Когда твит сохранен, он выполняет этот код в StatusController, который отправляет полученный tweet_text в Twitter через OAuth:

Следующие шаги

В этой части серии мы рассмотрели, как аутентифицироваться с помощью API Twitter через OAuth, как запрашивать диапазоны твитов на временной шкале пользователя и как подсчитывать символы и отправлять твиты через API. Надеюсь, что этот урок был вам полезен.

Часть третья будет охватывать использование Twitter Streaming API и его реализацию Phirehose.

Пожалуйста, размещайте любые комментарии, исправления или дополнительные идеи ниже. Вы можете найти мои другие уроки Tuts + на моей странице автора или подписаться на меня в Twitter @reifman.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.