PHP:在提交表单时发布tweet
PHP: Posting a tweet on submitting a form
我有一个模板,其中包含一个供用户填写的表单。在用户使用他/她的Twitter帐户成功登录后,用户被重定向到包含表单的模板。现在,我正在尝试实现一个功能,其中在用户提交表单后,tweet将发布在用户的Twitter时间轴上。
我使用Abraham的twitteroauth
来实现Twitter OAuth,并且还代表用户发布tweet。
我还使用save_post
钩子来触发一个函数,该函数将在表单提交后立即在用户的Twitter帐户上发布tweet。
<pre>
<?php
/*
*Template Name: Callback
*/
?>
<?php
session_start();
require "twitteroauth/autoload.php";
use Abraham'TwitterOAuth'TwitterOAuth;
define('CONSUMER_KEY', "XXXXXXXXXXX");
define('CONSUMER_SECRET', "XXXXXXXXXXX");
define('OAUTH_CALLBACK', "http://localhost/wordpress/index.php/callback/");
$request_token = [];
$request_token['oauth_token'] = $_SESSION['oauth_token'];
$request_token['oauth_token_secret'] = $_SESSION['oauth_token_secret'];
if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token'])
{
echo "Opps! Something went wrong!";
}
else
{
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);
$access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));
//print_r($access_token);
$_SESSION['access_token'] = $access_token;
$access_token = $_SESSION['access_token'];
//print_r($_REQUEST['oauth_verifier']);
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
$handle = $access_token['screen_name'];
$o_token = $access_token['oauth_token'];
$o_token_secret = $access_token['oauth_token_secret'];
$user_id = $access_token['user_id'];
$o_verifier = $_REQUEST['oauth_verifier'];
function cron_tweet()
{
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $o_token, $o_token_secret);
$response = $connection->post("statuses/update", array('status' => 'Versionuyyu 1.0'));
}
add_action('save_post', cron_tweet);
}
?>
<script>
var count = 0
function addNewMessage(count)
{
if(count > 5)
{
window.alert("NO MORE THAN 5!");
}
else
{
var celeb = document.createElement("input");
celeb.type = "text";
celeb.name = "tweet" + count;
celeb.placeholder = "Tweet" + " " + count;
celebrity.appendChild(celeb);
var date = document.createElement("input");
date.type = "datetime-local";
date.name = "date" + count;
date.placeholder = "message-date" + " " + count;
celebrity.appendChild(date);
celebrity.appendChild(document.createElement("br"));
celebrity.appendChild(document.createElement("br"));
}
}
function postResults()
{
<?php
$post_information = array(
'post_title' => 'New Tweet Schedule',
'post_content' => 'Mandatory content',
'post_status' => 'publish',
'post_type' => 'schedule_tweet',
);
$post_id = wp_insert_post( $post_information );
add_post_meta($post_id, 'twitter_handle', $handle, true);
add_post_meta($post_id, 'oauth_token', $o_token, true);
add_post_meta($post_id, 'oauth_token_secret', $o_token_secret, true);
add_post_meta($post_id, 'user_id', $user_id, true);
add_post_meta($post_id, 'tweet_1', $_POST['tweet1'], true);
add_post_meta($post_id, 'tweet_2', $_POST['tweet2'], true);
add_post_meta($post_id, 'tweet_3', $_POST['tweet3'], true);
add_post_meta($post_id, 'tweet_4', $_POST['tweet4'], true);
add_post_meta($post_id, 'tweet_5', $_POST['tweet5'], true);
add_post_meta($post_id, 'date_1', $_POST['date1'], true);
add_post_meta($post_id, 'date_2', $_POST['date2'], true);
add_post_meta($post_id, 'date_3', $_POST['date3'], true);
add_post_meta($post_id, 'date_4', $_POST['date4'], true);
add_post_meta($post_id, 'date_5', $_POST['date5'], true);
?>
}
</script>
<form method = "POST">
<fieldset>
<a style = "color:red" onclick = "addNewMessage(++count)">Schedule a tweet</a>
<div id = "celebrity"/>
</fieldset>
<br>
<fieldset>
<input type="hidden" name="submitted" id="submitted" value="true" />
<?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
<button type="submit" onclick = "postResults()"><?php _e('Add Campaign', 'framework') ?></button>
</fieldset>
</form>
如上所示,我定义了以下钩子,以便在用户单击Submit
按钮时立即触发cron_tweet
函数:
function cron_tweet()
{
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $o_token, $o_token_secret);
$response = $connection->post("statuses/update", array('status' => 'Versionuyyu 1.0'));
}
add_action('save_post', cron_tweet);
cron_tweet
函数基本上是尝试在用户的Twitter帐户上发布tweet。
然而,上面的代码似乎没有按预期工作。用户提交表单后,用户的Twitter帐户上没有发布任何tweet。
我的代码有什么问题吗?我错过什么了吗?
您是否看到任何错误?我能看到的最有可能的问题是$o_token
和$o_token_secret
不能从cron_tweet
的范围内看到。
$handle = $access_token['screen_name'];
$_SESSION['o_token'] = $access_token['oauth_token'];
$_SESSION['o_token_secret'] = $access_token['oauth_token_secret'];
$user_id = $access_token['user_id'];
$o_verifier = $_REQUEST['oauth_verifier'];
function cron_tweet()
{
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['o_token'], $_SESSION['o_token_secret']);
$response = $connection->post("statuses/update", array('status' => 'Versionuyyu 1.0'));
}
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何使用WCF服务和javascript表单post上传.doc文件
- Javascript生成的表单未提交
- 如何使用javascript或html下载PDF格式的填写表单
- HTML表单提交时未执行外部函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- Ajax发布表单序列化,发布引号'
- 多级HTML表单
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 在验证和发送邮件后更改联系人表单的 html
- jQuery表单添加不适用于下拉列表
- Rails/JSON:如何将JSON用于jquery UI自动完成表单
- 如何从pdftron webviewer获取表单数据
- JS验证ajax返回的html中的表单数据
- Javascript更新孙窗口中的表单元素
- 解析javascript表单验证器
- 阻止表单元素提交
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- PHP:在提交表单时发布tweet