Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%

<<< Unix время и Unix Timestamp (MySQL, PHP, JavaScript) || Memcache php >>>

Автопостинг в твитер через Twitter API

15.09.2012
Автопостинг в твитер через Twitter API

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

Именно в целях экономии моего и вашего времени, в данной статье, я опишу процесс реализации автопостинга в твитер, через Twitter API.

Автопостинг в твитер — это автоматическая публикация контента в Twitter.

Предлагаю создать скрипт на PHP, который позволит при определенных заранее условиях, отправлять записи в твиттер.

Условиями отправки может служить все что угодно, например, факт публикации новой статьи на блоге, обновление списка новостей на одном из моих сайтов, или даже ежедневная публикация строк из библии программиста.

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

Скрипт для автопостинга в твитер через API Twitter

Перед тем как привести готовый рабочий код скрипта, для автоматической отправки сообщений в твиттер, нам нужно подготовиться к его использованию. Чтобы получить возможность автопостинга в твитер сообщений нам нужно познакомиться с инструментом для разработчиков — Twitter API (application programming interface).

Twitter API – это набор готовых классов, и методов, предоставляемых твитером для использования во внешних программных продуктах.

С помощью Twitter API мы можем:

  1. Получать свои и чужие ленты твитов;
  2. Добавлять новые твиты;
  3. Удалять и обновлять старые записи;
  4. Получать только подходящие по параметрам твиты;
  5. Получать списки наших читателей и их друзей;
  6. Изменять настройки нашей учетной записи;
  7. Блокировать спамеров;
  8. Получать любую доступную информацию о интересующем нас аккаунте.

Через Twitter API можно осуществить любое действие, которое выполнимо в ручном режиме. С полным списком доступных возможностей можно ознакомиться в официальной документации.

Также нам понадобится два файла для авторизации и работы с Twitter API.

Скачать библиотеку для работы с Twitter API ( Скачали: 970 чел. ) 

Для автопостинга в твитер нам понадобится лишь одна функция из класса TwitterOAuth.

Благодаря скаченной библиотеке (автор некий Abraham Williams), отправить твит можно тремя, незамысловатыми, PHP строчками кода:

1
2
3
require_once './twitteroauth/twitteroauth.php';
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, OAUTH_TOKEN, OAUTH_SECRET);
$connection->post('statuses/update', array( 'status' =>'текст вита'));

При создании объекта TwitterOAuth в конструктор класса нужно передать специальные ключи для авторизации в системе. О том, где их взять я расскажу в конце статьи, дабы сконцентрироваться сейчас на технической стороне вопроса.

Во многих статьях описывается, как сделать автопостинг в твитер через Twitter API, но нигде я не нашел информации о том, как запостить ссылку вместе с текстом. Чтобы разобраться с этим, нужно обратиться документации, в которой мы найдем заметку о структуре твита в JSON формате:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
"text": "Twitter for Mac is now easier and faster, and you can open multiple windows at once http://t.co/0JG5Mcq",
    "entities": {
      "media": [
      ],
      "urls": [
        {
          "url": "http://t.co/0JG5Mcq",
          "display_url": "blog.twitter.com/2011/05/twitte…",
          "expanded_url": "http://blog.twitter.com/2011/05/twitter-for-mac-update.html",
          "indices": [
            84,
            103
          ]
        }
      ],
      "user_mentions": [
      ],
      "hashtags": [
      ]
    }

Оценив эту структуру, я подумал, что было бы удобно использовать ее в AJAX запросе, но поскольку это и лишние куски кода и не сама цель статьи, я решил перенести данное JSON представление твита, в вид ассоциативного PHP массива:

1
2
3
4
5
$connection->post('statuses/update', array(
      'status' => “тут есть на статья [Автопостинг в твитер] : http://lifeexample.ru/”,
      'entities' => array("urls" =>
                                     array("url" => http://lifeexample.ru/”,)
                  ));

Как видите код, явно исключил лишнее, но этого и достаточно для выполнения поставленной задачи автопостинга ссылки в твитер. Стоит пояснить, что используемый в коде метод post, класса TwitterOAuth, получив входящий асоциативный массив, немедленно перегоняет его в нужный JSON формат и отправляет на сервер твитера.

Имея представление о том, как автоматически отправить пост со ссылкой в твитер, мы можем реализовать простенький сервис.

Сервис автопостинга в твитер через API twitter

Код php скрипта для сервиса автопостинга в твитер:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?
header('Content-Type: text/html; charset= utf-8');

if(isset($_POST['send'])){
    if(isset($_POST['message'])&&$_POST['message']!=""){   
   
    require_once './twitteroauth/twitteroauth.php';
   

    $connection = new TwitterOAuth(
        "вставьте ваш Consumer key",
        "вставьте Consumer secret",
        "вставьте Access token",
        "вставьте Access token secret"
    ); 
   
    if(trim($_POST['url'])!="") $delimetr = " : ";
      $connection->post('statuses/update', array(
      'status' => $_POST['message'] . $delimetr . $_POST['url'],
      'entities' => array("urls" =>
                              array("url" => $_POST['url'],)
                        )
                    ));  

      $msg="Отправленно собщение: <br/>".$_POST['message'];
    }
  }

?>

<?if($msg):?>
<?echo $msg;?>
<br/>
<a href="http://moguta.ru/autoposting.php">Отправить еще одно сообщение</a>
<?else:?>
Для автоматического поста, введите текст, и нажмите "Сказать".
<form action="" method="POST">
  <input type="text" name="message" value="<?=$_POST['message']?>"/>
  <br/>
  Ссылка:
  <br/>
  <input type="text" name="url" value="<?=$_POST['url']?>"/> Пример (http://lifeexample.ru/)
  <br/>
  <input type="submit" name="send" value="Сказать">
</form>
<?endif;?>

В вызов конструктора TwitterOAuth нам нужно вставить «Consumer key», » Consumer secret»,» Access token», » Access token secret».

Получить их не сложно, но есть мелкие нюансы.

Регистрация сервиса в Twitter приложениях

Чтобы наш сервис автопостинга заработал, нужно зарегистрировать его в приложениях, вашего твиттер аккаунта. Авторизируйтесь в twittere и перейдите на страницу создания приложений.

Регистрация приложения в Twitter API

Заполните обязательные поля: название приложения, его описание, и вебсайт на котором оно будет использоваться.
Жмите кнопку "Creat your twitter application".

Как получить Access token и Access token secret API twitter

На этом этапе, регистрация приложения завершена, но вы еще не получили необходимых для работы с twitter API параметров "Access token" и "Access token secret".

Вам нужно получить эти параметры, нажав на кнопку внизу страницы "Create my".

Получение access token для автопостинга в твитер

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

Чтобы поменять права, вам нужно во вкладке "Settings" найти раздел "Application Type" и установить галочку на "Read and Write".

установка прав на запись постов в твитер

Не забудьте после этого применить выбор кнопкой "Update this Twitter application settings".

Казалось бы, что на этом настройка аккаунта закончена, и можно автоматически отправлять посты в твитер, но, к сожалению это не все. Вернувшись, на начальную вкладку "Details", мы увидим, что "Access level" по-прежнему имеет значение: "Read-only".

На этом этапе я долго танцевал с бубном, пока мне пришло в голову переделать мои параметры доступа, нажав на кнопку "Recreate my accsess token".

После обновления параметров, доступ изменится на "Read and write", и можно с успехом пользоваться заготовленным ранее скриптом автопостинга в тивитер через Twitep API.

Скачать архив со скриптами сервиса ( Скачали: 970 чел. ) 

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

Время — это капитал работника умственного труда.

Оноре де Бальзак

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Нравится

Комментарии

  • Aleksey

    Здравствуйте, а не подскажите как вывести expanded_url из xml/json? У меня лично ничего не получилось.

    • Я думаю как-то так: alert(data.entities.media.expanded_url);

      где data — это json ответ.

    • Aleksey

      Я немного другое имею в виду:

      1
      2
      3
      4
      //лента пользователя в json
      $tweet=json_decode(file_get_contents("http://api.twitter.com/1/statuses/user_timeline/twitterapi.json"));
      //получение текста твита
      echo $tweet[0]->text;

      Как получить из ленты статуса — expanded_url?

      1
      $tweet[0]->expanded_url;

      не работает.

  • Вот что вернется в вашем примере в переменную $tweet

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Array
    (
        [0] => stdClass Object
            (
                [created_at] => Wed Sep 26 21:19:43 +0000 2012
                [id] => 2.51068556627E+17
                [id_str] => 251068556626763777
                [text] => TweetMeme is transitioning their old button to the Tweet Button in the next 24hrs. Read more: "A TweetMeme Farewell" http://t.co/TOObqNDK
                [source] => Twitter for Mac
                [truncated] =>
                [in_reply_to_status_id] =>
                [in_reply_to_status_id_str] =>
                [in_reply_to_user_id] =>
                [in_reply_to_user_id_str] =>
                [in_reply_to_screen_name] =>
                [user] => stdClass Object
                    (
                        [id] => 6253282
                        [id_str] => 6253282
                        [name] => Twitter API
                        [screen_name] => twitterapi
                        [location] => San Francisco, CA
                        [url] => http://dev.twitter.com
                        [description] => The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.
                        [protected] =>
                        [followers_count] => 1243744
                        [friends_count] => 31
                        [listed_count] => 10842
                        [created_at] => Wed May 23 06:01:13 +0000 2007
                        [favourites_count] => 25
                        [utc_offset] => -28800
                        [time_zone] => Pacific Time (US & Canada)
                        [geo_enabled] => 1
                        [verified] => 1
                        [statuses_count] => 3338
                        [lang] => en
                        [contributors_enabled] => 1
                        [is_translator] =>
                        [profile_background_color] => C0DEED
                        [profile_background_image_url] => http://a0.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png
                        [profile_background_image_url_https] => https://si0.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png
                        [profile_background_tile] => 1
                        [profile_image_url] => http://a0.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png
                        [profile_image_url_https] => https://si0.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png
                        [profile_banner_url] => https://si0.twimg.com/profile_banners/6253282/1347394302
                        [profile_link_color] => 0084B4
                        [profile_sidebar_border_color] => C0DEED
                        [profile_sidebar_fill_color] => DDEEF6
                        [profile_text_color] => 333333
                        [profile_use_background_image] => 1
                        [default_profile] =>
                        [default_profile_image] =>
                        [following] =>
                        [follow_request_sent] =>
                        [notifications] =>
                    )

                [geo] =>
                [coordinates] =>
                [place] =>
                [contributors] =>
                [retweet_count] => 42
                [favorited] =>
                [retweeted] =>
                [possibly_sensitive] =>
            )

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

    1
    echo $tweet[0]->user->url;

    Что касается expanded_url — такого значения этот массив не содержит, смотрите сами что вам нужно из этого набора данных. Вывести его можно таким образом:

    1
    2
    3
    echo "<pre>";
    print_r($tweet);
    echo "</pre>";
    • Aleksey

      url — это сокращенная ссылка, expanded_url — прямая, если добавить в адрес ссылки include_entities=true то в массиве есть элемент expanded_url, как тогда его вывести?

      1
      2
      //лента пользователя в json
      $tweet=json_decode(file_get_contents("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=twitterapi&amp;include_entities=true"));
    • В таком случае вот так можно достать expanded_url:

      1
      2
      3
      echo "<pre>";
      print_r($tweet[0]->entities->urls[0]->expanded_url);    
      echo "</pre>";
    • Aleksey

      Спасибо, последний вопрос: я в адресе ссылки дописал count=10, как теперь вывести expanded_url для всех 10 сообщений?

    • Вот так:

      1
      2
      3
      for($i=0; $i<10; $i++){
        echo $tweet[$i]->entities->urls[0]->expanded_url;    
      }
  • Марат

    Здравствуйте Марк, статья мне очень помогла, у меня один вопрос, каким образом с помощью библиотеки Абрахама можно у знать срок токена, вроде можно с помощью оператора expires_at, но тут как это использовать?

    • Если честно, не задавался этой задачей, поэтому помочь не могу. Отпишите, как разберетесь, мне и читателям будет интересно.

  • Semm

    Почему то последнее время перестало работать (раньше все работало). Твитер в API не изменил что-нибудь случайно?

  • Stas

    Делаю вроде все по инструкциям. Создал приложение в твиттер поставил права «Read and Write», ключи пересоздал. Ошибок приложение никаких не выдает, но и в twiiter не постит. Не могу понять в чем может быть дело. Может кто подскажет в чем может быть проблема?

    • Semm

      Попробуйте английский текст запостить, если будет постить то проблема с кирилицей. Сам с такой проблемой сегодня столкнулся.

  • Stas

    У меня сайт на freebsd крутиться. Похоже в нем проблема! На локальном xampp все заработало. Какие-то глюки в расширения php наверно.

  • луиза

    Если допустим я хочу затвиртить по 10 разным аккаунтом скриптом множество постов, мне нужно для каждого аккаунта проходить регистрацию приложения?

  • romeno

    Здравствуйте.
    Подскажите еще как делать ретвиты. Нигде не нашел.
    Спасибо.

  • FaNiska

    Спасибо за статью. Буквально за 15 минут все настроил и заработало!
    Автопостинг в твиттер работает на ура! Еще раз спасибо 🙂
    И еще неплохо было бы для тех, кто не разбирается в php принудительно обрезать текст твита до 140 символов. Иначе автопубликация не проходит.

  • Сергей

    Подскажите пожалуйста как выдернуть результат при отправке сообщения на ленту.
    Т.е я через скрипт отправляю сообщение, содержащее ссылку, и мне нужно получить преобразованную твитером сокращенную ссылку

  • Денис

    По предложенному способу URL не постится. Текст да, а ссылка нет.

  • Alex

    извините, но я не понял куда поместить скачанные скрипты? как их настроить чтобы постились, например, новые посты или RSS лента?

  • alex

    а можно как-то хэш-теги в твит вставить?

  • alex

    а можно поподробней: куда загрузить, что постить, как настроить?

  • Александр

    Копируем их в надежное место и никому не показываем. Проверяем также в этом разделе Access level — он должен быть Read and write .

  • Оставить комментарий

    Подписаться на комментарии к этой статье по RSS

    Яндекс.Метрика