Обновление статуса Twitter OAuth с помощью PHP

Twitter является наиболее мощной платформой, с помощью которой вы можете выразить собственные мысли своим фолловерам.

Несколько месяцев назад Twitter обновил приложения OAuth, в этой статье будет пояснены нововведения в работе трех из них: вход в Twitter, хранение токенов Twitter OAuth в базе данных и обновление статуса сообщений Twitter с помощью собственного веб-приложения.

Этот скрипт поможет вам делиться обновлениями вашего веб-приложения через обновление статуса пользователя Twitter:

Скачать скрипт Демо-версия

База данных

Пример столбцов таблицы базы данных users id, email, oauth_uid, oauth_provider и username:

EpiTwitter
-- TwitterConfig.php
-- EpiTwitter.php
-- EpiCurl.php
-- EpiOAuth.php //Библиотека Twitter Oauth
index.php
home.php
db.php
TwitterLogin.php
TwitterCallback.php
TwitterUpdate.php
TwitterLogout.php

Создаем приложение Twitter

Вам нужно создать приложение и задать для него информацию следующим образом:

Создаем приложение Twitter

Настройки приложения

Изменение уровня доступа приложения:

Настройки приложения

Уровень доступа

Измените Read only на Read and Write:

Уровень доступа

API ключи приложения

https://apps.twitter.com/app/new

Уровень доступа - 2

Настройки приложения Twitter

Вам нужно изменить API key и Api secret.

TwitterConfig.php

<?php
$consumer_key = 'API key';
$consumer_secret = 'API secret';
?>

db.php

Файл конфигурации базы данных, вам нужно обновить такую информацию, как username, password и database name:

<?php
session_start();
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'username');
define('DB_PASSWORD', 'password');
define('DB_DATABASE', 'databaseName');
$connection = @mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE) ordie(mysqli_error());
?>

TwitterLogin.php

Этот код будет генерировать URL-адрес авторизации Twitter:

<?php
include 'EpiTwitter/EpiCurl.php';
include 'EpiTwitter/EpiOAuth.php';
include 'EpiTwitter/EpiTwitter.php';
include 'EpiTwitter/TwitterConfig.php';
$twitterObj = new EpiTwitter($consumer_key, $consumer_secret);
$TwitterLoginUrl=$twitterObj->getAuthorizationUrl();
header("Location: $TwitterLoginUrl");
?>

index.php

Содержит PHP-код, гиперссылку на файл TwitterLogin.php:

<?php
session_start();
//Login session check 
if(!empty($_SESSION['TwitterUsername']))
{
header("Location: home.php");
}
?>
//HTML-код
<a href="TwitterLogin.php">Login with Twitter</a>

TwitterCallback.php

URL-адрес обратного вызова приложения Twitter. Twitter будет отсылать все значения токенов OAuth к следующему файлу.

Пожалуйста, следуйте комментариям в коде:

<?php
include 'EpiTwitter/EpiCurl.php';
include 'EpiTwitter/EpiOAuth.php';
include 'EpiTwitter/EpiTwitter.php';
include 'EpiTwitter/TwitterConfig.php';
include("db.php");

$Twitter = new EpiTwitter($consumer_key, $consumer_secret);

if(isset($_GET['oauth_token']) || (isset($_SESSION['oauth_token']) &&isset($_SESSION['oauth_token_secret'])))
{
 
if(empty($_SESSION['oauth_token']) && empty($_SESSION['oauth_token_secret']) )
{
$Twitter->setToken($_GET['oauth_token']);
$token = $Twitter->getAccessToken();
$_SESSION['oauth_token']=$token->oauth_token;
$_SESSION['oauth_token_secret']= $token->oauth_token_secret;
$Twitter->setToken($token->oauth_token, $token->oauth_token_secret); 
}
else
{
$Twitter->setToken($_SESSION['oauth_token'],$_SESSION['oauth_token_secret']);
}

$userData= $Twitter->get_accountVerify_credentials();
$TwitterUsername=$userData->screen_name;
$TwitterFullname=$userData->name; 
$_SESSION['TwitterUsername']=$TwitterUsername;
$_SESSION['TwitterFullname']=$TwitterFullname;
$oauth_token=$_SESSION['oauth_token'];
$oauth_token_secret=$_SESSION['oauth_token_secret'];
//Проверка доступности пользователя. 
$tw_sql=mysqli_query($connection,"SELECT user_id FROM TwitterUpdate WHERE uname='$TwitterUsername'");

if(mysqli_num_rows($tw_sql) == 0)
{
//Добавление значений в таблицу TwitterUpdate
$sql=mysqli_query($connection,"INSERT into TwitterUpdate(uname,name,oauth_token,oauth_token_secret) VALUES ('$TwitterUsername','$TwitterFullname','$oauth_token','$oauth_token_secret');");
}
header('Location: home.php'); // Страница переадресации 
  
}
else
{
header('Location: index.php');
}
?>

home.php

Этот код содержит PHP, Javascript(jquery) и простой HTML. Здесь $("#submit").click(function(){}- подтверждение существует ли id имя кнопки ввода.

С помощью $("#message").val("") вызывается значение textarea:

<?php
session_start();
if(empty($_SESSION['TwitterUsername']))
{
header('Location: index.php');
}
?>
<script  src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(document).ready(function()
{
//Вывод индикатора количества символов 
$("#message").keyup(function()
{
var A=$.trim($(this).val());
$("#count").html(A.length);
});


//Обновление сообщения Ajax в Twitter.   
$("#submit").click(function()
{
var A=$.trim($("#message").val());
var dataString = 'TwitterMessage='+ A ;

if(A.length<=145)
{
$.ajax({
type: "POST",
url: "TwitterUpdate.php", //Вызов Ajax
data: dataString,
cache: false,
beforeSend: function()
{
$("#submit").val("Updating...");
},
success: function(data)
{ 
var B=$("#username").val();
var C='https://twitter.com/'+B+'/status/'+data;
$("#link").html('<a href="'+C+'" target="_blank">'+C+'</a>');
$("#submit").val("Post to Twitter");
$("#message").val("").focus();
$("#count").html('0');
}
});
}
else
{
alert("Maximum 145 characters."); 
}

return false;
});
  
});
</script>
//HTML-код
<h1>Welcome to <?php echo $_SESSION['TwitterFullname']; ?></h1>
<form method="post" action="">
<textarea id="message"></textarea><span id="count">0</span>
<input type="hidden" value="<?php echo $_SESSION['TwitterUsername']; ?>" id="username"/>
<input type="submit" id="submit"  value="Post to Twitter"/>
<div id="link"></div>
</form>
<a href="TwitterLogout.php">Logout</a>

TwitterUpdate.php

Файл обновления статуса Twitter OAuth:

<?php
include 'EpiTwitter/EpiCurl.php';
include 'EpiTwitter/EpiOAuth.php';
include 'EpiTwitter/EpiTwitter.php';
include 'EpiTwitter/TwitterConfig.php';
include("db.php");
if(isset($_POST['TwitterMessage']) && !empty($_SESSION['TwitterUsername']))
{
$message=mysql_real_escape_string($_POST['TwitterMessage']);
$TwitterUsername=$_SESSION['TwitterUsername'];
//Получение значений из таблицы TwitterUpdate. 
$tw_sql=mysqli_query($connection,"SELECT oauth_token,oauth_token_secret FROM TwitterUpdate WHERE uname='$TwitterUsername'");
$row=mysqli_fetch_array($tw_sql,MYSQLI_ASSOC);
$oauth_token=$row["oauth_token"];
$oauth_token_secret=$row["oauth_token_secret"];
if(strlen($oauth_token)>0 && strlen($oauth_token_secret)>0 )
{
$Twitter = new EpiTwitter($consumer_key, $consumer_secret);
$Twitter->setToken($oauth_token,$oauth_token_secret);
//Обновление статуса Twitter
$status=$Twitter->post_statusesUpdate(array('status' => $message));
echo $status->id_str;
}
}
?>

TwitterLogout.php

Завершение сессии, все значения сессии удаляются, и осуществляется перенаправление на страницу index.php:

<?php
session_start();
unset($_SESSION['TwitterUsername']);
unset($_SESSION['oauth_token']);
unset($_SESSION['oauth_token_secret']);
session_destroy();
header("location: index.php");
?>

РедакцияПеревод статьи «Twitter OAuth Status Update using PHP»