В первой части серии мы рассмотрели различные типы конкурсов в Твиттере и решили разработать конкурс хэштегов, так как это был один из самых популярных типов конкурсов и не полагался на удачу. До сих пор мы аутентифицировали наших пользователей с помощью приложения 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. Затем вы можете создать твит, прося других следовать. Победитель может быть выбран на основе наибольшего количества подписчиков из списка подписчиков пользователей.
-
Создайте конкурс по списку. Сначала попросите пользователей идентифицировать себя и создать список по заданной теме. Тогда пусть пользователи продвигают свой список через твиты. Победитель может быть выбран на основе наибольшего количества подписчиков в списке.
Теперь пришло время использовать демо-версию и начать на Твиттере с этим уроком. Все ваши предложения и комментарии приветствуются. Я с нетерпением жду чтения ваших твитов!