ksoftware (ksoftware) wrote,
ksoftware
ksoftware

Как отправлять твиты c фотками с сайта или Uploading Media: Multiple Photos на php

Учтите, что программист я тот ещё, а сайт php.net нашёл вчера. Ну почти.


Я давно хотел твитить снепы. Пришлось повозиться, чтобы реализовать. Кстати: twitter.com/designsnapper

Для отправки твитов нужно зарегистрировать приложение на сайте твитера и написать немного кода.

Первая преграда — создать это ёбаное приложение. Я два дня пытался понять, как. А всё потому, что ссылки в интернете ведут на dev.twitter.com, а там какой-то ёбаный Фабрик (я, ессно, его скачал, установил, пообщался с поддержкой), который нужен для другого.

А для сайта нужен apps.twitter.com.

Чтобы создать приложение, нажмите на кнопочку «Create New App» :-)

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


Дальше сходите и скачайте библиотечку для работы с апи Твитера. Там ничего особенно, большинство пользуется библиотекой некого Абрама. Я тупо скачал архив и залил его на сайт:
github.com/abraham/twitteroauth

Следующая хитрость — затвитить в фотки. Твитер обновил апи и теперь надо сначала фотки залить, получить айдишники залитых, а потом отправить твит, указав полученные айдишники. Всё это написано на сайте, но мне не хватило ума написать собственный код:
https://dev.twitter.com/rest/public/uploading-media-multiple-photos

Как постить твит мне подсказал Коля Митин, а заливку фоток я подсмотрел:
https://twittercommunity.com/t/uploading-base64-encoded-image-using-1-1-media-upload-json/26983/7

В результате получился файл twitter.php:

require_once('/../twitter/twitteroauth/twitteroauth.php');

class KTwitter {
 function tweet($tweetText, $imageURL) {
  
  /*Connect to Twitter*/
  $connection = new TwitterOAuth(
   'Consumer Key', 
   'Consumer Secret', 
   'Access Token', 
   'Access Token Secret');
  
  $account = $connection->get('account/verify_credentials');
   
  /*To tweet photo, you need to upload it first and get ids*/
  $url = 'https://upload.twitter.com/1.1/media/upload.json';
  $method = 'POST';
  
  $parameters = array( 'media' => base64_encode( file_get_contents($imageURL)) );
  
  $request = OAuthRequest::from_consumer_and_token(
   $connection->consumer, $connection->token, $method, $url, $parameters);
  
  $request->sign_request($connection->sha1_method, $connection->consumer, $connection->token);
  
  $response = $connection->http($request->get_normalized_http_url(), $method, $request->to_postdata());
    
  if ($connection->format === 'json' && $connection->decode_json) {
   $response = json_decode($response);
  }
  
  /*Then you pass ids into the tweet*/
  $status = $connection->post(
   'statuses/update', 
   array('status' => $tweetText, 'media_ids' => $response->media_id_string)); 
   
  //var_dump($status);

 }
}


Вызов:

require_once('twitter.php');

$twitter = new KTwitter();
$twitter->tweet('Hello World!', 'my-image-url.png');


Не забудьте подставить ключи своего приложения.
Tags: php, Дизайн-снепер, Код, Программирование, Твитер, Чайт
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments