【问题标题】:Questions regarding use of Twitter-Oauth API in php关于在 php 中使用 Twitter-Oauth API 的问题
【发布时间】:2013-10-13 15:15:06
【问题描述】:

最近我读了一篇很好的教程How to Authenticate Users With Twitter OAuth,即使它是在更改 Twitter ID 格式之前编写的,但它也适用于新的 Twitter ID 格式。

我有一些问题,请解释一下是否有人成功完成了..

  • 为什么我们总是调用两个方法 getRequestTokengetAccessToken ?是得到access tokenaccess token secret 吗?但两者都已经在下面的页面给出了......

    http://dev.twitter.com/apps/{your_app_id}/my_token.

    request tokenrequest token secret到底需要什么??虽然我注意到每次处理时两个令牌都不同。

  • 如果我们从下面的方法更新我们的状态

    $connection->post( 'statuses/update', array('status' => 'some message got from text area value' );

那我们如何验证状态是否已成功更新?这意味着如果我想显示警报消息post has been sent successfully,我如何在我们的 PHP 页面中实现它??

  • 哪个回调 URL 很重要,即用户在 Twitter 上发布或做事后实际导航到哪里?

    1. 是在开发应用程序时写的URLRegistered OAuth Callback URL

      http://dev.twitter.com/apps/{id_no}

    2. 是不是我们的 php 代码中定义的 URL (config.php) 之类的

      define('OAUTH_CALLBACK', 'http://www.xyz.com');

    再来一个Q'n

  • 拒绝应用程序访问如何处理?
    注意:请参考我的Question regarding this

@Thai 更新

我按照你的建议做了以下

$user_info = $connection->get('account/verify_credentials');
$status_info =$connection->get('statuses/show/', array('id' =>32320907720523776) );

echo "<pre>";
print_r($status_info);

echo "</pre> Content : <pre>";
print_r($user_info);

返回下方

stdClass Object
(
    [request] => /1/statuses/show.json?id=3.2320907720524E%2B16&oauth_consumer_key=jashak..&oauth_nonce=bec...&oauth_signature=%2FMj%2B0Z7oyYNKdMn%2B%2FOJ6Ba8ccfo%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1296541384&oauth_token=223961574-cW4...&oauth_version=1.0a
    [error] => No status found with that ID.
)

注意: 为了安全起见,我隐藏了 oauth_consumer keyoauth_nonceoauth_token ;)

Content:
stdClass Object
(
    [follow_request_sent] => 
    [profile_link_color] => 038543
    [profile_image_url] => http://a3.twimg.com/profile_images/1215444646/minialist-photography-9_normal.jpg
    [contributors_enabled] => 
    [favourites_count] => 31
    [profile_sidebar_border_color] => EEEEEE
    [id_str] => 223961574 // this is also id_str
    [status] => stdClass Object
        (
            [retweeted] => 
            [id_str] => 32320907720523776 // this id_str i used
            [in_reply_to_status_id_str] => 
            [geo] => 
            [contributors] => 
            [source] => Black Noise
            [in_reply_to_user_id_str] => 
            [retweet_count] => 0
            [truncated] => 
            [coordinates] => 
            [created_at] => Tue Feb 01 06:14:39 +0000 2011
            [favorited] => 
            [text] => Twitter test: verify that status has been updated
            [place] => 
            [in_reply_to_screen_name] => 
            [in_reply_to_status_id] => 
            [id] => 3.2320907720524E+16
            [in_reply_to_user_id] => 
        )
   [screen_name] => ltweetl
   [profile_use_background_image] => 1
   ....
   ...

我收到了错误No status found with that ID,你提到了哪个id_str??

【问题讨论】:

    标签: php twitter-oauth


    【解决方案1】:

    此答案并非专门针对 Abraham 的 Twitter-OAuth API,而是一般适用于 Twitter 的 OAuth API。

    1. 该页面仅向您提供您的访问令牌和您自己的应用程序的访问令牌秘密。如果您不需要像任何其他用户一样对您的应用进行身份验证,这很好,因此无需请求请求令牌,也无需将请求令牌交换为访问令牌,您只需使用您的访问令牌

      但是,如果您想以其他用户身份进行身份验证,则必须完成所有必需的步骤,此处简要说明:

      • 您请求 request 令牌。它仅用于登录,不能用于访问用户的数据。您将获得请求令牌和请求令牌秘密。在请求请求令牌时,您可以指定回调 URL,当 Twitter 成功通过身份验证时,会将您的用户发送到该回调 URL。
      • 您需要保留请求令牌和机密,直到身份验证完成。
      • 之后,您将用户重定向到 http://api.twitter.com/oauth/authorize?oauth_token=,然后是 OAuth 令牌。
      • 在用户登录 Twitter 并允许您的应用程序后,Twitter 会将用户发送回回调 URL。
      • 您将请求令牌交换为访问令牌,然后您可以丢弃请求令牌,因为您不再需要它。

      您可以在需要时保留访问令牌。如果您不保留访问令牌,则需要再次请求请求令牌并交换访问令牌,并且您的用户必须重新登录。

      因此,基本上,如果您正在创建用户需要使用 Twitter 登录的内容,则需要执行上述所有步骤以使用户登录。如果您只是自己使用 Twitter 的 API,则不需要需要认证步骤。 使用您的访问令牌。

    2. 您可以通过检查返回响应中的id_str 键来检查推文的 ID

      如果状态未发布,Twitter 将返回一个错误对象。

    3. 您可以在应用设置页面中指定默认 OAuth 回调,当您没有明确指定回调时将使用该回调。

      这是必需的,因为如果您不知何故忘记或没有指定回调 URL,Twitter 仍然会知道将您的用户重定向到哪里。

      不过,Twitter 鼓励您应该明确指定回调 URL。使用回调 URL 有很多好处,例如能够指定任何 URL 作为回调。我曾经从中受益,因为我的 Twitter 客户端在两个不同的域上运行,我可以将用户重定向回正确的位置。

    【讨论】:

    • @Thai.. 关于您的第 1 点,这意味着我们可以在没有身份验证的情况下与任何用户一起运行我们的应用程序??
    • @Thai 关于第 3 点,我说 twitter 应用程序要遵循哪个回调 URL?我在两个地方都写了一个不同的回调 URL,
    • @diEcho 1. 用户必须先登录 Twitter 并允许您的应用程序首先访问,然后您才能获得该令牌。您使用令牌而不是他们的用户名和密码。获得令牌后,只要用户不撤消您的应用程序的访问权限,您就可以保留它。
    • @diEcho 3. 应用程序代码中的 URL 比注册的 URL 更重要。如果您的代码发送回调 URL,它将使用从您的代码发送的 URL。如果没有,它会将用户发送到已注册的用户。
    • @diEcho 您需要将您的 ID 放在引号中,因为它对于 PHP 来说太大了。 'id' =&gt; '32320907720523776'
    【解决方案2】:

    因为我们只有在使用验证者验证用户后才能获得 AccessToken 和 Access Token Secret。

    验证者在OAuth过程中是最重要的。所以我们需要发送一个请求来生成 AccessToken 和 Access Token Secret 。

    获得 AccessToken 和 Access Token Secret 后,我​​们可以在用户指定的时间内使用它,同时允许您的 Twitter 应用程序允许访问他的 Info.it 可能是 1 天 1 个月,就像 LInkedin OAuth 中的明智做法一样,在那之后 AccessToken 和Access Token Secret 过期......

    【讨论】:

    • 我在我的问题中写道.. 当我们创建任何应用程序时,访问令牌和访问令牌秘密已经给出
    【解决方案3】:

    当你这样做时你会得到什么:

    $temp = $connection->post( 'statuses/update', array('status' => 'some message got from textarea value' );
    print_r($temp);
    

    我猜想这会将响应(以 json/xml 格式)格式存储在 $temp var 中。 (要测试推特回复,您可以查看http://dev.twitter.com/console

    在 config.php 中定义的回调 url 将决定重定向到哪里。这是因为这个回调参数最近被添加到了 twitter API。之前只能在twitter.com的App管理部分定义回调url,如果没有定义其他url,这个url就是默认url。

    【讨论】:

    • 我得到以下结果 TwitterOAuth 对象([http_code] => 200 [last_api_call] => api.twitter.com/1/statuses/update.json [host] => api.twitter.com/1 [timeout] => 30 [connecttimeout] => 30 [ ssl_verifypeer] => [format] => json [decode_json] => 1 [sha1_method] => OAuthSignatureMethod_HMAC_SHA1 Object () [consumer] => OAuthConsumer Object ([key] => [secret] => ) [token] => OAuthConsumer对象 ([key] => [secret] =>) )
    • print_r($temp->response) 有什么作用吗?
    • @diEcho 嗯,我想我根本不知道 Abraham API。您可以尝试使用有效的身份验证调用 $connection->post 行并且没有有效的身份验证,也许 $temp 响应会有所不同。我认为如果您未通过身份验证,“http_code”响应可能会有所不同。
    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2021-07-23
    • 2018-12-10
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多