Twitter OAuth(PHP):需要一个好的、基础的例子来开始

38
使用Facebook的PHP SDK,我能够很快地在我的网站上实现Facebook登录。他们只是设置了一个$user变量,非常容易访问。
但是,我一直没有尝试过使Twitter的OAuth登录工作...坦率地说,他们的github材料对于相对新手的PHP和Web设计者来说很令人困惑且无用,更不用说我尝试过的许多非官方示例都很令人困惑或已过时。
我真的需要一些帮助来使Twitter登录工作-我只是需要一个基本的示例,其中我点击登录按钮,授权我的应用程序,然后重定向到一个页面,在该页面上显示已登录用户的名称。
我非常感谢你的帮助。
编辑:我知道亚伯拉罕的Twitter OAuth的存在,但它几乎没有提供任何说明来使他的东西工作。

1
是的,我也一直在寻找一个可行的解决方案。很多看起来只是给出了不起作用的示例。 - cfrederich
你反对使用像Zend Framework这样的框架吗?如果不是,那么有一些使用它的工作示例。 - BRampersad
6个回答

32

这是获取授权链接并在从 Twitter 返回后提取用户基本信息的基本示例。

<?php
session_start();
//add autoload note:do check your file paths in autoload.php
require "ret/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
//this code will run when returned from twiter after authentication
if(isset($_SESSION['oauth_token'])){
  $oauth_token=$_SESSION['oauth_token'];unset($_SESSION['oauth_token']);
  $consumer_key = 'your consumer key';
  $consumer_secret = 'your secret key';
  $connection = new TwitterOAuth($consumer_key, $consumer_secret);
 //necessary to get access token other wise u will not have permision to get user info
  $params=array("oauth_verifier" => $_GET['oauth_verifier'],"oauth_token"=>$_GET['oauth_token']);
  $access_token = $connection->oauth("oauth/access_token", $params);
  //now again create new instance using updated return oauth_token and oauth_token_secret because old one expired if u dont u this u will also get token expired error
  $connection = new TwitterOAuth($consumer_key, $consumer_secret,
  $access_token['oauth_token'],$access_token['oauth_token_secret']);
  $content = $connection->get("account/verify_credentials");
  print_r($content);
}
else{
  // main startup code
  $consumer_key = 'your consumer key';
  $consumer_secret = 'your secret key';
  //this code will return your valid url which u can use in iframe src to popup or can directly view the page as its happening in this example

  $connection = new TwitterOAuth($consumer_key, $consumer_secret);
  $temporary_credentials = $connection->oauth('oauth/request_token', array("oauth_callback" =>'http://dev.crm.alifca.com/twitter/index.php'));
  $_SESSION['oauth_token']=$temporary_credentials['oauth_token'];       $_SESSION['oauth_token_secret']=$temporary_credentials['oauth_token_secret'];$url = $connection->url("oauth/authorize", array("oauth_token" => $temporary_credentials['oauth_token']));
// REDIRECTING TO THE URL
  header('Location: ' . $url); 
}
?>

4
这个很顺利。我只是复制和粘贴更新了消费者密钥和返回网址,它按预期运行了。 - Gene Kelly
太棒了!在过去的两天里,我整天在互联网上搜索,但只找到了旧的twitteroauth代码。致敬!这个工作就像涂了黄油一样顺畅! - Kaustav Banerjee
添加自动加载注释:请检查autoload.php文件中的文件路径。我们需要检查什么?我应该在这个文件中修改什么? - Fred37b
你会如何在本地计算机上测试这个程序?由于Java库(例如Twitter4j)不需要回调部分代码,因此可以省略该部分。 - vanomart
@Fred37b,您的文件路径是指您放置autoload文件的位置,请确保在autoload.php中路径相同。 - zoomi
这个功能非常好,但是我的oauth_token不断过期,每次刷新都需要重新授权。有没有一种方法可以在不需要频繁向Twitter授权的情况下长时间获取推文? - Sanjok Gurung

28

我刚刚试了一下Github上的Abraham's TwitterOAuth,对我来说似乎可以正常工作。这是我所做的:

  1. 使用以下命令克隆代码库:https://github.com/abraham/twitteroauth.git
  2. 上传到你的Web主机上,例如,www.example.com
  3. 前往Twitter应用并注册你的应用程序。你需要进行以下更改(假设你将使用托管在http://www.example.com/twitteroauth的Abraham's TwitterOAuth示例):
    a) 应用程序网站将是http://www.example.com/twitteroauth
    b) 应用程序类型将是浏览器
    c) 回调URL为http://www.example.com/twitteroauth/callback.php(Callback.php包含在git源代码中)
  4. 完成后,你将获得CONSUMER_KEY和CONSUMER_SECRET,你可以在twitteroauth分布的config.php文件中更新它们。还要确保将回调设置为与http://www.example.com/twitteroauth/callback.php相同。

就这样。如果你现在导航到http://www.example.com/twitteroauth,你将获得一个“使用Twitter登录”的按钮,它会带你前往Twitter授权请求并带你回到index.php页面。

编辑: 示例可能不起作用,但不要担心。按照上述步骤并上传到服务器。 确保你将Github代码库中的config-sample.php文件重命名为config.php。

如果你想看一个工作示例,请移步此处


谢谢,这个可以用...但是我怎么访问$content数组中的特定元素呢?如果我尝试$twittername = $content['screen_name'];,我会得到错误Fatal error: Cannot use object of type stdClass as array - tnw
3
数据存储在 StdClass 中(这是 PHP 中使用的通用空类)。你可以使用 $content->{screen_name} 访问屏幕名称。 - rajasaur
3
两个例子都无法使用。 - shukshin.ivan
最好通过$content->screen_name来访问它。 - Siick
2
截至2020年1月,此答案不适用于最新的twitteroauth存储库。 - Felix Turner

2
这是逐步指南,教你如何使用PHP将Twitter OAuth API集成到Web应用程序中。请按照教程操作。

http://www.smarttutorials.net/sign-in-with-twitter-oauth-api-using-php/

您需要先通过以下网址创建 Twitter 应用程序:

https://apps.twitter.com/

然后您需要为Twitter应用程序提供必要的信息。一旦您提供了所有信息并保存它,您将获得Twitter应用程序的Consumer Key和Consumer Secret。
请从上面的链接下载源文件,并用您的Consumer Key(API密钥)、Consumer Secret(API密钥)和回调URL替换TWITTER_CONSUMER_KEY、TWITTER_CONSUMER_SECRET和TWITTER_OAUTH_CALLBACK。然后将其上传到您的服务器。现在它将成功工作。

谢谢您添加这个!这是我很早的一个问题,但显然仍然可以作为参考使用。 - tnw

2
以下是一些OAuth 1.0A PHP库及其示例: Twitter async 提供了关于如何简单地让用户登录的文档,正如您所要求的那样。

0

最近我需要使用Twitter的API V2通过PHP发布新推文,但是在网上找不到任何好的例子,这些例子都是使用V1或V1.1。最终我使用了TwitterOAuth这个很棒的包来解决问题。

首先通过composer require abraham/twitteroauth安装这个包(或手动安装),然后访问developer.twitter.com,创建一个新应用程序以获取使用API所需的凭据(见下文)。接下来,您可以根据以下代码发布推文。

use Abraham\TwitterOAuth\TwitterOAuth;

// Connect
$connection = new TwitterOAuth($twitterConsumerKey,             // Your API key
                               $twitterConsumerSecret,          // Your API secret key
                               $twitterOauthAccessToken,        // From your app created at https://developer.twitter.com/
                               $twitterOauthAccessTokenSecret); // From your app created at https://developer.twitter.com/

// Set API version to 2                           
$connection->setApiVersion('2');

// POST the tweet; the third parameter must be set to true so it is sent as JSON
// See https://developer.twitter.com/en/docs/twitter-api/tweets/manage-tweets/api-reference/post-tweets for all options
$response = $connection->post('tweets', ['text' => 'Hello Twitter'], true);

if (isset($response['title']) && $response['title'] == 'Unauthorized') {

    // Handle error

} else {

    var_dump($response);

    /*
    object(stdClass)#404 (1) {
      ["data"]=>
      object(stdClass)#397 (2) {
        ["id"]=>
        string(19) "0123456789012345678"
        ["text"]=>
        string(13) "Hello Twitter"
      }
    }
    */

}

0

Abraham的Twitteroauth在这里有一个可工作的演示: https://github.com/abraham/twitteroauth-demo

按照演示自述文件中的步骤对我很有用。为了在macOS上运行composer,我必须在安装后执行以下操作:mv composer.phar /usr/local/bin/composer

我认为演示可以更简单,并且应该包含在主要的twitteroauth存储库中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接