Статьи

Создание твиттер-хэштег-конкурса — создание и подсчет твитов

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

Давайте начнем.

Инициализация экрана Tweet

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

public function createUserSession($credentials){ $_SESSION['user_id'] = $credentials["user_id"]; $_SESSION['user_token'] = $credentials["oauth_token"]; $_SESSION['user_secret'] = $credentials["oauth_token_secret"]; $this->initializeTweetScreen(); } 

Давайте посмотрим на реализацию экрана твитов с HTML-формой.

 public function initializeTweetScreen($message = ''){ $html = "<div>".$message."</div> <form action='' method='POST' > <textarea name='post_tweet' id='post_tweet'></textarea> <input name='submit_tweet' type='submit' value='Tweet' /> </form>"; echo $html; } 

Теперь пользователь может отправлять твиты, используя простую форму HTML.

Создание твитов

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

 if   ( isset ( $_SESSION [ 'user_id' ]))   { 
     if   ( isset ( $_POST [ 'submit_tweet' ]))   { $tweet_text =  isset ( $_POST [ 'post_tweet' ])   ?  $_POST [ 'post_tweet' ]   :   '' ; $message =  $contest -> createTweet ( $tweet_text ); $contest -> initializeTweetScreen ( $message ); 
     }   else   { $contest -> initializeTweetScreen (); 
     } 
 } 

Это перехватывает запрос POST и добавляет содержимое твита. Мы будем использовать функцию createTweet для доступа к API Twitter, как показано ниже.

 public   function  createTweet ( $tweet_text )   { $error =   "" ; $hash_tags =   " #SPC #twcontesttutorial " ; 
     if   ( empty ( $tweet_text )   ||  strlen ( $tweet_text .  $hash_tags )   >   140 )   { $error .=   "Tweet text should contain 1-140 characters." ; 
     } 
     if   ( empty ( $error ))   { $twitter_auth =  $this -> initializeTwitterObject (); $code =  $twitter_auth -> request ( 'POST' ,  $twitter_auth -> url ( '1.1/statuses/update' ),  array ( 'status'   =>  $tweet_text .  $hash_tags )); 
         if   ( $code ==   200 )   { $response =  json_decode ( $twitter_auth -> response [ "response" ]); 
             return   "Tweet Created Successfully" ; 
         } 
     }   else   { 
         return  $error ; 
     } 
 } 

Как мы обсуждали в разделе планирования, два #SPC с #twcontesttutorial #SPC и #twcontesttutorial будут использоваться с каждым твитом. Далее мы проверим наличие ошибок в твите. После успешной проверки мы используем функцию initializeTwitterObject для создания объекта библиотеки Twitter, как показано в следующем коде.

 public   function  initializeTwitterObject ()   { $this -> app_details =  array ( 
         'consumer_key'   =>  $this -> config [ 'consumer_key' ], 
         'consumer_secret'   =>  $this -> config [ 'consumer_secret' ], 
         'user_token'   =>  $_SESSION [ 'user_token' ], 
         'user_secret'   =>  $_SESSION [ 'user_secret' ] 
     ); $twitter_auth =   new  tmhOAuth ( $this -> app_details ); 
     return  $twitter_auth ; 
 } 

В этом сценарии объект будет инициализирован с помощью user_token и user_secret а не только с помощью consumer_key и consumer_secret .

Затем мы выполняем запрос твита, используя URL API 1.1/statuses/update . Мы передаем отправленный пользователем текст в сочетании с нашими хэштегами, используя параметр status. После успешного выполнения запроса мы показываем сообщение пользователю для завершения процесса.

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

Отображение результатов конкурса

Результаты конкурса будут рассчитываться исходя из количества ретвитов. Мы должны использовать функции API поиска в Твиттере, чтобы получить желаемые результаты. Давайте посмотрим на обновленный код.

 if(isset($_GET['action']) && $_GET['action'] == 'results'){ $contest->getContestResults(); } 

Теперь мы рассмотрим функцию getContestResults .

 public   function  getContestResults ()   { $twitter_auth =  $this -> initializeTwitterObject (); $search_params =  array ( 'q'   =>   '#SPC #twcontesttutorial -RT' ,   'count'   =>   100 ,   'result_type'   =>   'recent' ); $this -> retrieveTweets ( $twitter_auth ,  $search_params ); $contest_results =  array (); $html =   "<table>" ; $html .=   "<tr><td>Username</td><td>Retweets</td></tr>" ; 

     foreach   ( $this -> result_tweets as  $key =>  $value )   { $username =  $value -> user -> screen_name ; $contest_results [ $username ]   =  isset ( $contest_results [ $username ])   ?   ( $contest_results [ $username ]   +  $value -> retweet_count )   :  $value -> retweet_count ; 
     } 

     foreach   ( $contest_results as  $key =>  $res )   { $html .=   "<tr><td>"   .  $key .   "</td><td>"   .  $res .   "</td></tr>" ; 
     } $html .=   "</table>" ; echo $html ; 
 } 

Сначала мы определяем параметры, необходимые для поиска. Поисковый запрос будет представлять собой комбинацию двух хэштегов. Мы также использовали -RT для предотвращения подсчета ретвитов, так как ретвиты не должны учитываться как твит, сгенерированный из приложения.

Параметр count определяет количество записей на странице.

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

Далее мы вызываем функцию retrieveTweets для генерации результатов. Следующий код предварительно retrieveTweets реализацию функции retrieveTweets .

 public   function  retrieveTweets ( $twitter_auth ,  $search_params )   { $code =  $twitter_auth -> request ( 'GET' ,  $twitter_auth -> url ( '1.1/search/tweets' ),  $search_params ); $response =  json_decode ( $twitter_auth -> response [ "response" ]); 

     foreach   ( $response -> statuses as  $value )   { array_push ( $this -> result_tweets ,  $value ); 
     } 

     if   ( isset ( $response -> search_metadata -> next_results )   &&  count ( $this -> result_tweets )   <   500 )   { $search_meta =  substr ( $response -> search_metadata -> next_results ,   1 ); $search_meta =  explode ( "&" ,  $search_meta ); $max_id =   0 ; 
         foreach   ( $search_meta as  $sm )   { $max_id_res =  explode ( "=" ,  $sm ); 
             if   ( $max_id_res [ 0 ]   ==   'max_id' )   { $max_id =  $max_id_res [ 1 ]; 
             } 
         } $search_params [ 'max_id' ]   =  $max_id ; $this -> retrieveTweets ( $twitter_auth ,  $search_params ); 
     } 
 } 

Это рекурсивная функция, используемая для постраничного поиска твитов. Мы вызываем URL API 1.1/search/tweets с параметрами по умолчанию и назначаем все полученные твиты в массив. Мы должны вызывать эту функцию рекурсивно, чтобы генерировать результаты оставшихся страниц. Поэтому мы проверяем наличие в ответе next_results , а также превышает ли наш результирующий набор заданный лимит.

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

Затем мы извлекаем параметр max_id и назначаем его параметрам поиска для генерации следующего набора результатов. Наконец, мы вызываем функцию рекурсивно, пока не достигнем конца результатов или 500 твитов и result_tweets массиву result_tweets . Теперь мы можем вернуться к оставшимся разделам функции getContestResults .

Затем мы result_tweets массив result_tweets и создаем новый массив, подсчитывая общее количество твитов для каждого имени пользователя. Наконец, мы отображаем итоговое количество ретвитов с именами пользователей. Мы можем выбрать победителей автоматически, отсортировав этот массив.

Мы ограничиваем набор результатов до 500 твитов. Ограничение количества твитов в наборе результатов также будет преимуществом для нашего приложения. Потому что он будет использовать только последние 500 твитов конкурса. Таким образом, пользователи не могут просто создавать твиты и сидеть сложа руки. Они должны постоянно твитнуть, чтобы попасть в последние 500 твитов до завершения конкурса.

Мы завершили реализацию конкурса хэштегов в Твиттере, и теперь пришло время проверить его.

Вы можете получить доступ к демо здесь и скачать исходный код здесь .

Создайте несколько твитов и постарайтесь получить как можно больше ретвитов. Убедитесь, что вы используете материалы, связанные с этим учебником, для твитов. Тогда посетите здесь, чтобы просмотреть результаты.

Ограничения

Это приложение было разработано, чтобы представить вас на конкурсе с помощью Twitter API, но, конечно, оно имеет некоторые ограничения. Чтобы проводить живые конкурсы, вам необходимо тщательно обдумать и решить эти ограничения. Ограничения включают в себя:

  • Пользователи должны храниться в базе данных, а не просто использовать сеанс браузера для хранения значений.

  • Нам нужно внедрить спам-фильтры для удаления любых спам-твитов с помощью наших хэштегов.

  • В настоящее время мы рассматриваем все твиты с заданными хэштегами. В идеале, мы должны рассматривать только те твиты, созданные зарегистрированными пользователями.

  • Обработка исключений должна быть реализована для предоставления сообщений об ошибках пользователям.

  • PHP не должен выводить столько HTML-кода — если конкурсное приложение не является одноразовым, вам, вероятно, следует использовать платформу и полагаться на представления и шаблоны, чтобы сохранить структурированный код

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

Вывод

Как только вы привыкнете к разработке конкурсов в Твиттере, станет очень просто создавать уникальные типы конкурсов с широким спектром функций API Twitter. Я рекомендую попробовать следующие конкурсы, чтобы освоить тему и начать генерировать более высокий трафик и продвигать ваше приложение.

  • Создайте конкурс и выиграйте конкурс. Во-первых, для участия в конкурсе пользователям необходимо следить за данным профилем в Twitter. Затем вы можете создать твит, прося других следовать. Победитель может быть выбран на основе наибольшего количества подписчиков из списка подписчиков пользователей.

  • Создайте конкурс по списку. Сначала попросите пользователей идентифицировать себя и создать список по заданной теме. Тогда пусть пользователи продвигают свой список через твиты. Победитель может быть выбран на основе наибольшего количества подписчиков в списке.

Теперь пришло время использовать демо-версию и начать на Твиттере с этим уроком. Все ваши предложения и комментарии приветствуются. Я с нетерпением жду чтения ваших твитов!