Обновление статуса 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
Вам нужно создать приложение и задать для него информацию следующим образом:

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

Уровень доступа
Измените Read only на Read and Write:

API ключи приложения
https://apps.twitter.com/app/new

Настройки приложения 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");
?>