如何使用OAuth在您的网站上发布Twitter
Twitter crossposter with OAuth
带有OAuth的Twitter交叉海报
Recently (seems in august of 2010) Twitter was changed, and now it doesn’t support basic authentication (as usual via CURL), all authentication is done via OAuth. In this article I made tutorial how to create crossposter to Twitter (using Twitter OAuth).
最近(似乎是2010年8月),Twitter进行了更改,现在它不支持基本身份验证(通常通过CURL),所有身份验证都是通过OAuth完成的。 在本文中,我进行了教程(如何使用Twitter OAuth)创建到Twitter的交叉海报。
Here are samples and downloadable package:
以下是示例和可下载的软件包:
现场演示
[sociallocker]
[社交储物柜]
打包下载
[/sociallocker]
[/ sociallocker]
Ok, download the example files and lets start coding !
好的,下载示例文件并开始编码!
步骤1. HTML (Step 1. HTML)
As usual, we start with the HTML.
和往常一样,我们从HTML开始。
I prepared several templates which we will use. First template for guests only.
我准备了几个模板,我们将使用它们。 仅用于访客的第一个模板。
templates / twitter_login.html (templates/twitter_login.html)
<h3>Hell Guest, <a href="tw_login.php">Login to Twitter</a></h3>
<h3>Hell Guest, <a href="tw_login.php">Login to Twitter</a></h3>
Next template – post form for logged members.
下一个模板–已记录成员的发布表单。
templates / twitter_post.html (templates/twitter_post.html)
<h3>Hello @__twitter_name__</h3>
<hr />
<form method="post">
<table>
<tr>
<td valign="top">What`s happening?</td>
<td><textarea name="message" rows="4" cols="75" class="input_area"></textarea></td>
</tr>
<tr>
<td></td>
<td><small>(Twitter will trucate your tweet if your tweet size exceed 140 characters limit.)</small></td>
</tr>
<tr>
<td></td><td><input type="submit" name="post" value="Tweet" /></td>
</tr>
</table>
</form>
<h3>Hello @__twitter_name__</h3>
<hr />
<form method="post">
<table>
<tr>
<td valign="top">What`s happening?</td>
<td><textarea name="message" rows="4" cols="75" class="input_area"></textarea></td>
</tr>
<tr>
<td></td>
<td><small>(Twitter will trucate your tweet if your tweet size exceed 140 characters limit.)</small></td>
</tr>
<tr>
<td></td><td><input type="submit" name="post" value="Tweet" /></td>
</tr>
</table>
</form>
And last one – nice twitter widget which allow us to see posts of members. We will use it to see out posts.
最后一个-漂亮的Twitter小部件,它使我们可以查看成员的帖子。 我们将使用它查看帖子。
templates / twitter_widget.html (templates/twitter_widget.html)
<img src="https://www.script-tutorials.com/logo-tuts.png" alt="logo">
<script src="http://widgets.twimg.com/j/2/widget.js"></script>
<script>
new TWTR.Widget({
version: 2,
type: 'profile',
rpp: 10,
interval: 6000,
width: 'auto',
height: 300,
theme: {
shell: {
background: '#333333',
color: '#ffffff'
},
tweets: {
background: '#000000',
color: '#ffffff',
links: '#4aed05'
}
},
features: {
scrollbar: true,
loop: false,
live: false,
hashtags: true,
timestamp: true,
avatars: true,
behavior: 'all'
}
}).render().setUser('__twitter_name__').start();
</script>
<img src="https://www.script-tutorials.com/logo-tuts.png" alt="logo">
<script src="http://widgets.twimg.com/j/2/widget.js"></script>
<script>
new TWTR.Widget({
version: 2,
type: 'profile',
rpp: 10,
interval: 6000,
width: 'auto',
height: 300,
theme: {
shell: {
background: '#333333',
color: '#ffffff'
},
tweets: {
background: '#000000',
color: '#ffffff',
links: '#4aed05'
}
},
features: {
scrollbar: true,
loop: false,
live: false,
hashtags: true,
timestamp: true,
avatars: true,
behavior: 'all'
}
}).render().setUser('__twitter_name__').start();
</script>
步骤2. SQL (Step 2. SQL)
We will need to execute next SQL in our database. In this case we will storing oauth info of members.
我们将需要在数据库中执行下一个SQL。 在这种情况下,我们将存储成员的oauth信息。
CREATE TABLE `atwitter_oauth_users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`oauth_provider` varchar(10),
`oauth_uid` text,
`oauth_token` text,
`oauth_secret` text,
`username` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `atwitter_oauth_users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`oauth_provider` varchar(10),
`oauth_uid` text,
`oauth_token` text,
`oauth_secret` text,
`username` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
步骤3. PHP (Step 3. PHP)
Now is most interested, functional itself
现在最感兴趣的是功能本身
Used libraries I put to ‘inc’ folder, this is OAuth.php and twitteroauth.php files. I don`t will include source code of these libraries in this article, here are many code, both libraries located in our package.
我把放在'inc'文件夹中的二手库,这是OAuth.php和twitteroauth.php文件。 我不会在本文中包含这些库的源代码,这里有很多代码,这两个库都位于我们的程序包中。
Our first file – just config file, containing Twitter consumer Key and Secret plus database details
我们的第一个文件–仅是配置文件,包含Twitter使用者**和Secret以及数据库详细信息
Important, you will need to register your own application and obtain Twitter consumer key and secret code at http://dev.twitter.com/apps/new
重要的是,您需要注册自己的应用程序,并在http://dev.twitter.com/apps/new上获取Twitter使用者**和密码。
During registering you will need point to callback url (http://www.yoursite.com/tw_login.php), also select ‘Read & Write’ to allow posting to your twitter, next fields like application URL can be like http://www.yoursite.com/
在注册过程中,您需要指向回调URL(http://www.yoursite.com/tw_login.php),还选择“ Read&Write”(允许读写)以发布到Twitter,接下来的字段(如应用程序URL)可以像http:/ /www.yoursite.com/
Here are my result with these settings:
这是这些设置的结果:
inc / header.php (inc/header.php)
$sConsumerKey = 'YOUR_TWITTER_CONSUMER_KEY';
$sConsumerSecret = 'YOUR_TWITTER_CONSUMER_SECRET';
$sDbName = 'YOUR_DATABASE_NAME';
$sDbUserName = 'YOUR_DATABASE_USERNAME';
$sDbUserPass = 'YOUR_DATABASE_USER_PASS';
$sConsumerKey = 'YOUR_TWITTER_CONSUMER_KEY';
$sConsumerSecret = 'YOUR_TWITTER_CONSUMER_SECRET';
$sDbName = 'YOUR_DATABASE_NAME';
$sDbUserName = 'YOUR_DATABASE_USERNAME';
$sDbUserPass = 'YOUR_DATABASE_USER_PASS';
Next file – our main file. This file will draw ‘Hello guest’ for guests, and when we logged it it will show our posts from Twitter plus form where we can Tweet out thoughts. Hope that code very understandable
下一个文件-我们的主文件。 该文件将为来宾绘制“ Hello guest”,当我们记录该文件时,它将显示来自Twitter的帖子以及可用来表达想法的表格。 希望代码很容易理解
index.php (index.php)
// set error reporting level
if (version_compare(phpversion(), "5.3.0", ">=") == 1)
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
else
error_reporting(E_ALL & ~E_NOTICE);
require_once('inc/header.php');
session_start();
echo '<link rel="stylesheet" href="templates/css/main.css" type="text/css" />';
// cross posting
if($_POST['post']) {
$sPostingRes = "<h3><div class='success'>Your tweet not posted to Twitter (error happen)</div></h3>";
$bPostRes = performTwitterPost($_POST['message']);
if ($bPostRes) {
$sPostingRes = "<h3><div class='success'>Your tweet has posted to Twitter</div></h3>";
}
echo $sPostingRes;
}
if ($_SESSION['oauth_username'] != '') {
$aTmplWidgValues = array(
'__twitter_name__' => $_SESSION['oauth_username']
);
$sFileWidgContent = file_get_contents('templates/twitter_widget.html');
$aWidgKeys = array_keys($aTmplWidgValues);
$aWidgValues = array_values($aTmplWidgValues);
echo str_replace($aWidgKeys, $aWidgValues, $sFileWidgContent); // draw widget
$aTmplFormValues = array(
'__twitter_name__' => $_SESSION['oauth_username']
);
$aFormKeys = array_keys($aTmplFormValues);
$sFileFormContent = file_get_contents('templates/twitter_post.html');
$aFormValues = array_values($aTmplFormValues);
echo str_replace($aFormKeys, $aFormValues, $sFileFormContent); // draw posting form
} else {
require_once('templates/twitter_login.html'); // draw login
}
function performTwitterPost($sMessage) {
global $sConsumerKey, $sConsumerSecret;
require_once('inc/twitteroauth.php');
$oTweet = new TwitterOAuth($sConsumerKey, $sConsumerSecret, $_SESSION['oauth_token'], $_SESSION['oauth_secret']);
$oTweet->post('statuses/update', array('status' => $sMessage));
return true;
}
// set error reporting level
if (version_compare(phpversion(), "5.3.0", ">=") == 1)
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
else
error_reporting(E_ALL & ~E_NOTICE);
require_once('inc/header.php');
session_start();
echo '<link rel="stylesheet" href="templates/css/main.css" type="text/css" />';
// cross posting
if($_POST['post']) {
$sPostingRes = "<h3><div class='success'>Your tweet not posted to Twitter (error happen)</div></h3>";
$bPostRes = performTwitterPost($_POST['message']);
if ($bPostRes) {
$sPostingRes = "<h3><div class='success'>Your tweet has posted to Twitter</div></h3>";
}
echo $sPostingRes;
}
if ($_SESSION['oauth_username'] != '') {
$aTmplWidgValues = array(
'__twitter_name__' => $_SESSION['oauth_username']
);
$sFileWidgContent = file_get_contents('templates/twitter_widget.html');
$aWidgKeys = array_keys($aTmplWidgValues);
$aWidgValues = array_values($aTmplWidgValues);
echo str_replace($aWidgKeys, $aWidgValues, $sFileWidgContent); // draw widget
$aTmplFormValues = array(
'__twitter_name__' => $_SESSION['oauth_username']
);
$aFormKeys = array_keys($aTmplFormValues);
$sFileFormContent = file_get_contents('templates/twitter_post.html');
$aFormValues = array_values($aTmplFormValues);
echo str_replace($aFormKeys, $aFormValues, $sFileFormContent); // draw posting form
} else {
require_once('templates/twitter_login.html'); // draw login
}
function performTwitterPost($sMessage) {
global $sConsumerKey, $sConsumerSecret;
require_once('inc/twitteroauth.php');
$oTweet = new TwitterOAuth($sConsumerKey, $sConsumerSecret, $_SESSION['oauth_token'], $_SESSION['oauth_secret']);
$oTweet->post('statuses/update', array('status' => $sMessage));
return true;
}
Next two files we will using for authentication of members using TwitterOAuth
接下来的两个文件,我们将使用TwitterOAuth对成员进行身份验证
tw_login.php (tw_login.php)
require_once('inc/header.php');
require_once('inc/twitteroauth.php');
global $sConsumerKey, $sConsumerSecret;
session_start();
$oTwitterOauth = new TwitterOAuth($sConsumerKey, $sConsumerSecret);
$aRequestToken = $oTwitterOauth->getRequestToken('http://www.yoursite.com/tw_oauth.php'); // getting authentication tokens
// saving token params into the session
$_SESSION['oauth_token'] = $aRequestToken['oauth_token'];
$_SESSION['oauth_token_secret'] = $aRequestToken['oauth_token_secret'];
if($oTwitterOauth->http_code==200) { // in case of success
$sUrl = $oTwitterOauth->getAuthorizeURL($aRequestToken['oauth_token']); // generate authorization url
header('Location: '. $sUrl); // redirecting
} else {
die('Error happened due authorization');
}
require_once('inc/header.php');
require_once('inc/twitteroauth.php');
global $sConsumerKey, $sConsumerSecret;
session_start();
$oTwitterOauth = new TwitterOAuth($sConsumerKey, $sConsumerSecret);
$aRequestToken = $oTwitterOauth->getRequestToken('http://www.yoursite.com/tw_oauth.php'); // getting authentication tokens
// saving token params into the session
$_SESSION['oauth_token'] = $aRequestToken['oauth_token'];
$_SESSION['oauth_token_secret'] = $aRequestToken['oauth_token_secret'];
if($oTwitterOauth->http_code==200) { // in case of success
$sUrl = $oTwitterOauth->getAuthorizeURL($aRequestToken['oauth_token']); // generate authorization url
header('Location: '. $sUrl); // redirecting
} else {
die('Error happened due authorization');
}
require_once('inc/header.php');
require_once('inc/twitteroauth.php');
global $sConsumerKey, $sConsumerSecret;
session_start();
if (! empty($_GET['oauth_verifier']) && ! empty($_SESSION['oauth_token']) && ! empty($_SESSION['oauth_token_secret'])) {
} else { // some params missed, back to login page
header('Location: http://www.yoursite.com/tw_login.php');
}
$oTwitterOauth = new TwitterOAuth($sConsumerKey, $sConsumerSecret, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
$aAccessToken = $oTwitterOauth->getAccessToken($_GET['oauth_verifier']); // get access tokens
$_SESSION['access_token'] = $aAccessToken; // saving access token to sessions
$oUserInfo = $oTwitterOauth->get('account/verify_credentials'); // get account details
if(isset($oUserInfo->error)){
header('Location: http://www.yoursite.com/tw_login.php'); // in case of any errors - back to login page
} else {
global $sDbName, $sDbUserName, $sDbUserPass;
$vLink = mysql_connect('localhost', $sDbUserName, $sDbUserPass);
mysql_select_db($sDbName);
$vOAuth1 = mysql_query("SELECT * FROM `atwitter_oauth_users` WHERE `oauth_provider` = 'twitter' AND `oauth_uid` = '{$oUserInfo->id}'"); // searching for user in database
$aOauthUserInfo = mysql_fetch_array($vOAuth1);
if (empty($aOauthUserInfo)) { // if user info not present - add them into database
mysql_query("INSERT INTO `atwitter_oauth_users` (`oauth_provider`, `oauth_uid`, `username`, `oauth_token`, `oauth_secret`) VALUES ('twitter', {$oUserInfo->id}, '{$oUserInfo->screen_name}', '{$aAccessToken['oauth_token']}', '{$aAccessToken['oauth_token_secret']}')");
$vOAuth2 = mysql_query("SELECT * FROM `atwitter_oauth_users` WHERE `id` = '" . mysql_insert_id() . "'");
$aOauthUserInfo = mysql_fetch_array($vOAuth2);
} else {
mysql_query("UPDATE `atwitter_oauth_users` SET `oauth_token` = '{$aAccessToken['oauth_token']}', `oauth_secret` = '{$aAccessToken['oauth_token_secret']}' WHERE `oauth_provider` = 'twitter' AND `oauth_uid` = '{$oUserInfo->id}'"); // update tokens
}
$_SESSION['oauth_id'] = $aOauthUserInfo['id'];
$_SESSION['oauth_username'] = $aOauthUserInfo['username'];
$_SESSION['oauth_uid'] = $aOauthUserInfo['oauth_uid'];
$_SESSION['oauth_provider'] = $aOauthUserInfo['oauth_provider'];
$_SESSION['oauth_token'] = $aOauthUserInfo['oauth_token'];
$_SESSION['oauth_secret'] = $aOauthUserInfo['oauth_secret'];
mysql_close($vLink);
header('Location: http://www.yoursite.com/index.php');
}
if(!empty($_SESSION['oauth_username'])){
header('Location: http://www.yoursite.com/index.php'); // already logged, back to our main page
}
require_once('inc/header.php');
require_once('inc/twitteroauth.php');
global $sConsumerKey, $sConsumerSecret;
session_start();
if (! empty($_GET['oauth_verifier']) && ! empty($_SESSION['oauth_token']) && ! empty($_SESSION['oauth_token_secret'])) {
} else { // some params missed, back to login page
header('Location: http://www.yoursite.com/tw_login.php');
}
$oTwitterOauth = new TwitterOAuth($sConsumerKey, $sConsumerSecret, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
$aAccessToken = $oTwitterOauth->getAccessToken($_GET['oauth_verifier']); // get access tokens
$_SESSION['access_token'] = $aAccessToken; // saving access token to sessions
$oUserInfo = $oTwitterOauth->get('account/verify_credentials'); // get account details
if(isset($oUserInfo->error)){
header('Location: http://www.yoursite.com/tw_login.php'); // in case of any errors - back to login page
} else {
global $sDbName, $sDbUserName, $sDbUserPass;
$vLink = mysql_connect('localhost', $sDbUserName, $sDbUserPass);
mysql_select_db($sDbName);
$vOAuth1 = mysql_query("SELECT * FROM `atwitter_oauth_users` WHERE `oauth_provider` = 'twitter' AND `oauth_uid` = '{$oUserInfo->id}'"); // searching for user in database
$aOauthUserInfo = mysql_fetch_array($vOAuth1);
if (empty($aOauthUserInfo)) { // if user info not present - add them into database
mysql_query("INSERT INTO `atwitter_oauth_users` (`oauth_provider`, `oauth_uid`, `username`, `oauth_token`, `oauth_secret`) VALUES ('twitter', {$oUserInfo->id}, '{$oUserInfo->screen_name}', '{$aAccessToken['oauth_token']}', '{$aAccessToken['oauth_token_secret']}')");
$vOAuth2 = mysql_query("SELECT * FROM `atwitter_oauth_users` WHERE `id` = '" . mysql_insert_id() . "'");
$aOauthUserInfo = mysql_fetch_array($vOAuth2);
} else {
mysql_query("UPDATE `atwitter_oauth_users` SET `oauth_token` = '{$aAccessToken['oauth_token']}', `oauth_secret` = '{$aAccessToken['oauth_token_secret']}' WHERE `oauth_provider` = 'twitter' AND `oauth_uid` = '{$oUserInfo->id}'"); // update tokens
}
$_SESSION['oauth_id'] = $aOauthUserInfo['id'];
$_SESSION['oauth_username'] = $aOauthUserInfo['username'];
$_SESSION['oauth_uid'] = $aOauthUserInfo['oauth_uid'];
$_SESSION['oauth_provider'] = $aOauthUserInfo['oauth_provider'];
$_SESSION['oauth_token'] = $aOauthUserInfo['oauth_token'];
$_SESSION['oauth_secret'] = $aOauthUserInfo['oauth_secret'];
mysql_close($vLink);
header('Location: http://www.yoursite.com/index.php');
}
if(!empty($_SESSION['oauth_username'])){
header('Location: http://www.yoursite.com/index.php'); // already logged, back to our main page
}
Make attention, that in my article I used ‘http://www.yoursite.com/’, of course you will need apply your own URL
请注意,在我的文章中,我使用了“ http://www.yoursite.com/”,当然,您需要使用自己的URL
现场演示
结论 (Conclusion)
Today we learn not very easy lesson, but very useful. Now we will able to implement this tool into our projects to make it more friendly with another networks like Twitter. Good luck!
今天,我们学习的课程不是很容易,但非常有用。 现在,我们将能够在我们的项目中实施该工具,以使其与Twitter等其他网络更加友好。 祝好运!
翻译自: https://www.script-tutorials.com/twitter-crossposter-with-oauth/
下一篇: sql练习