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

APA*_*AD1 24 javascript php twitter jquery codebird

我正在尝试允许访问我网站的访问者直接在网站上发布带有图片的推文.我正在使用Codebird PHP库来实现这一目标.到目前为止一切正常,但是在帖子发布到用户帐户之前没有预览.目前,只需点击按钮即可直接发布到自己的帐户.

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

示例推文弹出窗口

这是我的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");
Run Code Online (Sandbox Code Playgroud)

这是我的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>
Run Code Online (Sandbox Code Playgroud)

gle*_*rns 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 ,该系统将弹出弹出窗口/网络意图

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

现在回答你的问题,既然你有一个图像,那么网络意图选项将不起作用,但如果它是一个带有图像(twitter 卡)的链接,那么我认为 Twitter 机器人应该能够阅读该页面并向你显示预览如果您在链接页面上有正确的元标记,则会弹出窗口