如何使用Codebird PHP从弹出窗口发布推文

时间:2017-06-02 14:50:47

标签: javascript php jquery twitter codebird

我正在尝试允许访问我网站的访问者直接从网站发布带有图片的推文。我正在使用Codebird PHP library来完成此任务。到目前为止一切正常,但是在帖子发布到用户的帐户之前没有预览。目前,只需点击按钮即可直接发布到自己的帐户。

我想要的是让它弹出一个小窗口,如果他们还没有登录就会要求他们登录,或者它会显示推文的预览并允许他们点击"推文"按钮,如果他们像在此图像中一样登录:

sample tweet popup window

这是我的PHP:

function tweet($message,$image) {
    require_once('codebird.php');
    \Codebird\Codebird::setConsumerKey("MYCONSUMERKEY", "MYCONSUMERSECRET");
    $cb = \Codebird\Codebird::getInstance();
    session_start();

    if (! isset($_SESSION['oauth_token'])) {
      // get the request token
      $reply = $cb->oauth_requestToken([
        'oauth_callback' => 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']
      ]);

      // store the token
      $cb->setToken($reply->oauth_token, $reply->oauth_token_secret);
      $_SESSION['oauth_token'] = $reply->oauth_token;
      $_SESSION['oauth_token_secret'] = $reply->oauth_token_secret;
      $_SESSION['oauth_verify'] = true;

      // redirect to auth website
      $auth_url = $cb->oauth_authorize();
      header('Location: ' . $auth_url);
      die();

    } elseif (isset($_GET['oauth_verifier']) && isset($_SESSION['oauth_verify'])) {
      // verify the token
      $cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
      unset($_SESSION['oauth_verify']);

      // get the access token
      $reply = $cb->oauth_accessToken([
        'oauth_verifier' => $_GET['oauth_verifier']
      ]);

      // store the token (which is different from the request token!)
      $_SESSION['oauth_token'] = $reply->oauth_token;
      $_SESSION['oauth_token_secret'] = $reply->oauth_token_secret;

      // send to same URL, without oauth GET parameters
      header('Location: ' . basename(__FILE__));
      die();
    }

    // assign access token on each page load
    $cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
    $reply = $cb->media_upload(array(
        'media' => $image
    ));
    $mediaID = $reply->media_id_string;
    $params = array(
        'status' => $message,
        'media_ids' => $mediaID
    );
    $reply = $cb->statuses_update($params);
}

tweet("Tweet tweet","assets/tweet.jpg");

这是我的Javascript / HTML:

function postTweet() {
  $.ajax({
    type: "POST",
    url: 'tweet.php',
    data:{action:'call_this'},
    success:function(html) {
      alert('Success!');
    }
  });
}
<button class="download-share" onclick="postTweet()">Download and Share</button>

3 个答案:

答案 0 :(得分:3)

在按钮单击中,您需要另一个打开弹出窗口的功能以及推文按钮。

将点击事件监听器postTweet添加到新的推文按钮。

我创建了一个示例代码段。请在下面查看。

要显示实时预览,您需要将keyup事件侦听器添加到textarea,它应该复制它的值并将其添加为预览窗格的innerHTML

function openTweet(){
    document.getElementsByClassName("preview")[0].style.display="";
    document.getElementById("tweetPr").innerHTML = document.getElementById("tweet").value;
    document.getElementById("tweet").addEventListener("keyup",
      function(){
          document.getElementById("tweetPr").innerHTML = document.getElementById("tweet").value;
      });
      document.getElementsByClassName("download-share")[0].style.display="none";
}

function postTweet() {
  $.ajax({
    type: "POST",
    url: 'tweet.php',
    data:{action:'call_this'},
    success:function(html) {
      alert('Success!');
    }
  });
}
<div style="display:none;" class="preview"><textarea id="tweet"> </textarea><div id="tweetPr"></div><button onclick="postTweet();">Tweet</button></div>
<button class="download-share" onclick="openTweet()">Download and Share</button>

答案 1 :(得分:2)

首先,您(codebird)正在使用twitter API发布到Twitter,这会使用API​​中的状态/更新端点。此调用是服务器到服务器的调用,即从托管文件的服务器到Twitter服务器。 https://dev.twitter.com/rest/reference/post/statuses/update

我认为有两种可能性可以帮助您实现您的目标

- 首先是使用twitters web意图系统,您可以使用该系统发送推文作为查询字符串,如果您已包含twitter js文件,则会弹出弹出窗口 https://dev.twitter.com/web/tweet-button/web-intent

- 如果那不是你真正的风格,那么你可以尝试像@ceejayoz提到的那样,通过重新创建必要的输入创建一个新的窗口,如图所示,并按照你现在的相同程序

现在问你的问题,既然你有一个图像,网页意图选项将不起作用,但如果它是一个图像链接(推特卡),那么我认为推特机器人应该能够阅读页面并告诉你弹出窗口中的预览,前提是您在链接页面上有正确的元标记

答案 2 :(得分:0)

尝试使用函数window.open

https://www.w3schools.com/jsref/met_win_open.asp

function postTweet() {
      $.ajax({
        type: "POST",
        url: 'tweet.php',
        data:{action:'call_this'},
        success:function() {
          success = true
        }
      });
      if(success)
      {
         window.open('tweet.php', "_blank", "toolbar=yes,scrollbars=yes,resizable=yes,top=500,left=500,width=400,height=400")
      }
}