【问题标题】:Scheduled posting to twitter in PHP cURL预定在 PHP cURL 中发布到 twitter
【发布时间】:2015-07-26 21:38:21
【问题描述】:

我目前可以使用 Twitter API 将推文发布到我的 Twitter 帐户。我正在使用 cURL。但现在我想在预定的日期/时间发布推文。我知道这是可能的,但不知道怎么做?

代码:

<?php
  $twitter_consumer_key = 'xxx';
  $twitter_consumer_secret = 'xxx';
  $twitter_access_token = 'xxx';
  $twitter_access_token_secret = 'xxx';
  $twitter_version = '1.0';
  $sign_method = 'HMAC-SHA1';
  $status="HelloWorld";
  $url = 'https://api.twitter.com/1.1/statuses/update.json';
  $param_string = 'oauth_consumer_key=' . $this->twitter_consumer_key .
        '&oauth_nonce=' . time() .
        '&oauth_signature_method=' . $this->sign_method .
        '&oauth_timestamp=' . time() .
        '&oauth_token=' . $this->twitter_access_token .
        '&oauth_version=' . $this->twitter_version .
        '&status=' . rawurlencode($status);

  //Generate a signature base string for POST
  $base_string = 'POST&' . rawurlencode($url) . '&' . rawurlencode($param_string);
  $sign_key = rawurlencode($this->twitter_consumer_secret) . '&' . rawurlencode($this->twitter_access_token_secret);

  //Generate a unique signature
  $signature = base64_encode(hash_hmac('sha1', $base_string, $sign_key, true));
  $curl_header = 'OAuth oauth_consumer_key=' . rawurlencode($this->twitter_consumer_key) . ',' .
      'oauth_nonce=' . rawurlencode(time()) . ',' .
      'oauth_signature=' . rawurlencode($signature) . ',' .
      'oauth_signature_method=' . $this->sign_method . ',' .
      'oauth_timestamp=' . rawurlencode(time()) . ',' .
      'oauth_token=' . rawurlencode($this->twitter_access_token) . ',' .         'oauth_version=' . $this->twitter_version;

  $ch = curl_init();
  //Twitter post
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: ' . $curl_header));
  curl_setopt($ch, CURLOPT_VERBOSE, 1);
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, 'status=' . rawurlencode($status));

  $twitter_post = json_decode(curl_exec($ch));
  curl_close($ch);
  print_r($twitter_post);
?>

我需要进行哪些更改才能在预定日期/时间发布推文

【问题讨论】:

  • 嘿,这有点离题了,但是对于任何想要使用您的代码的人来说,就像我刚才所做的那样,缺少两件事。首先 curl_setopt($ch, CURLOPT_URL, $url);是需要的。第二个 curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);在 $postData 应该等于 status=' 的地方是必需的。 rawurlencode($status),否则你会得到“无法验证你”的错误。
  • 哦,是的,谢谢,我已经更新了。

标签: php curl twitter cron cron-task


【解决方案1】:

以下是执行预定推文的总体情况:

1 - 为您的名为 post_tweets.php 的页面设置一个每分钟运行的 cron 任务(例如)

2 - 当用户想要安排推文时,保存推文,包括应将推文发布到数据库的日期/时间。假设这条推文应该在 2015-06-11 18:00:00 发布

3 - 每次您的页面 post_tweets.php 将由您的 cron 调用时,此页面应检查您的数据库中是否有一个比 post_tweets.php 执行时间更早的条目(如果该页面在 2015 年调用 - 06-11 18:00:35 或以上,您的页面将看到您在 2015-06-11 18:00:00 设置了一个条目 >> go go ,您必须发布推文!)

4 - 如果是,请发布推文。然后从你的数据库中删除推文

5 - 如果没有,什么都不会发生

此方法需要每分钟运行一次 SELECT 查询以检查是否有要发布的内容。

我希望你现在能更好地理解我的逻辑。

【讨论】:

    【解决方案2】:

    您可以使用 cron 作业。

    http://www.thesitewizard.com/general/set-cron-job.shtml 解释。

    https://www.setcronjob.com/ 如果您的主机(通常是共享主机)上没有 cron 选项,则免费提供服务

    享受吧!

    【讨论】:

    • 好吧,我不是 PHP 专家,所以这让我有点困惑。有没有一种简单的方法可以做到这一点?使用 Facebook API 很容易。我对 twitter 不满意。
    • 正如我所见,您无法像使用 Facebook 那样使用他们的 api 安排推文。所以用php你不能做到。你必须使用cron作业,看看它很简单。它有点像 Windows 任务调度程序,但适用于 Web 服务器。
    • @SunShine 那么,你有什么计划? :)
    • 嘿@zeflex,我正忙于其他工作。现在我回来了。您提供的链接非常好。我只是想安排一下,让它只工作一次。不反复。用户将给出带有年份的日期。只有在那个日期和年份才应该发布。只有一次。怎么办?
    • 您可以为您的脚本安排每分钟运行的 cron。在您的脚本中,您检查当前时间(执行时)是否与“一次性”预定帖子相同或过去。如果是,请卷曲并发布您的推文。然后删除条目以避免重复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2015-07-29
    • 2011-12-28
    • 2015-10-28
    • 2013-03-14
    • 1970-01-01
    • 2013-11-05
    相关资源
    最近更新 更多