我使用下面的代码来检索我的推文和echo json.这很好用.
<?php
session_start();
require_once('includes/twitter/twitteroauth.php');
$twitteruser = "xxxxxx";
$notweets = 3;
$consumerkey = "xxxxxxx";
$consumersecret = "xxxxxx";
$accesstoken = "xxxxxxxx";
$accesstokensecret = "xxxxxx";
$connection = new TwitterOAuth($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);
$tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=".$twitteruser."&count=".$notweets);
echo json_encode($tweets);
?>
Run Code Online (Sandbox Code Playgroud)
现在我想使用类似的代码发送推文,但它不起作用.我不确定发送语法是否正确.所以请有人帮助我.
<?php
session_start();
require_once('includes/twitter/twitteroauth.php'); //Path to twitteroauth library
$twitteruser = "xxxxxx";
$notweets = 3;
$consumerkey = "xxxxxxx";
$consumersecret = "xxxxxx";
$accesstoken = "xxxxxxxx";
$accesstokensecret = "xxxxxx";
// start connection
$connection = new TwitterOAuth($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);
//message
$message = "Hi how are you";
//send …Run Code Online (Sandbox Code Playgroud) 简短的问题:
我已经在apps.twitter.com为我的应用程序生成了访问令牌和访问令牌密钥.我如何使用它们发送请求https://api.twitter.com/1.1/statuses/user_timeline.json?
什么是承载令牌?它是访问令牌还是访问令牌秘密?或两者的编码?
一点背景:
我正在尝试制作一个应用程序,从我的Twitter时间线下载推文,而app用户不必通过他们的Twitter帐户进行身份验证.我知道我必须使用仅应用程序身份验证,并且文档(https://dev.twitter.com/docs/auth/application-only-auth)声明我需要使用Consumer Key和Consumer Secret来请求一个承载令牌.但是如果我已经使用generate按钮在apps.twitter.com上生成了令牌:
我当然可以将这些硬编码到我的应用程序中并以某种方式将它们作为Bearer Token传递出来?像这样我期望:
#define kTwitterBearerToken @"123456"
NSURL *twitterFeedURL = [NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=kylejm_&count=10"];
NSMutableURLRequest *URLRequest = [NSMutableURLRequest requestWithURL:twitterFeedURL];
[URLRequest setHTTPMethod:@"POST"];
[URLRequest setValue:[NSString stringWithFormat:@"Bearer %@", kTwitterBearerToken] forHTTPHeaderField:@"Authorization"];
NSURLResponse *URLResponse;
NSError *URLerror;
NSData *tweetData = [NSURLConnection sendSynchronousRequest:URLRequest returningResponse:&URLResponse error:&URLerror];
NSError *JSONError;
NSArray *tweets = [NSJSONSerialization JSONObjectWithData:tweetData options:0 error:&JSONError];
NSLog(@"%@", tweets);
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的答案和帮助!
凯尔
PS我看过STTwitter,但是当我想要实现的东西如此简单时,认为使用它是有点不必要的(至少看起来简单地将预先生成的令牌传递给我)...
我使用以下代码读取consumer_key和consumer_secret从config.php 读取,将其传递给twitter并从中检索一些信息.
以下脚本尝试执行的操作是"缓存"request_token和request_secret.所以在理论上我应该能够重用这些细节(所有4个细节都在需要时自动发推文).
<?php
require_once('twitteroauth/twitteroauth.php');
require_once('config.php');
$consumer_key = CONSUMER_KEY;
$consumer_secret = CONSUMER_SECRET;
if (isset($_GET["register"]))
{
// If the "register" parameter is set we create a new TwitterOAuth object
// and request a token
/* Build TwitterOAuth object with client credentials. */
$oauth = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
$request = $oauth->getRequestToken();
$request_token = $request["oauth_token"];
$request_token_secret = $request["oauth_token_secret"];
// At this I store the two request tokens somewhere.
file_put_contents("request_token", $request_token);
file_put_contents("request_token_secret", $request_token_secret);
// Generate a request link and output …Run Code Online (Sandbox Code Playgroud) 在开发需要访问twitter API的桌面应用程序时,必须以某种方式将应用程序的API密钥(特定于应用程序的用户密钥和使用者密钥)传递给用户.Twitter的API TOS声明应用程序的API密钥无法公开,如果发生这种情况,他们会重置它.当该应用程序在GPL下时,意味着开发人员需要向用户提供源代码,该用户如何在不公开可用的情况下获取API密钥?有没有一种标准的方法来处理这个问题?谢谢.
编辑:为了澄清这种情况,我在我的代码中将它们以纯文本形式存储在cree.py中,直到有意识的决定.但昨天Twitter支持团队联系我说他们已经重置了我的密钥,他们的推理如下:
C.您不应该征求其他开发人员的消费者密钥或消费者保密信息,特别是如果他们将被存储或用于开发人员无法控制的行为.被破坏的密钥和秘密将由Twitter重置.例如,不允许在线服务要求提供这些值以提供"推特 - 品牌"服务. https://dev.twitter.com/terms/api-terms 如果应用程序的密钥是公开发布的,则允许外部各方劫持应用程序的API访问权限.这会带来巨大的滥用风险,因此我们会重置您的API密钥.请注意确保这些密钥不会再次公开发布.
谢谢,Twitter API政策
在使用twitter API时,我遇到的oauth_signature基本上是(请求体+请求参数+ nonces/timestamps + a consumer_secret)的哈希值.该consumer_secret已知仅到正在发送的请求的应用程序.
在Twitter的案例中:
consumer_secret向每个授权的应用程序发出.由于主要用于oauth_signature防止MITM(即没有山雀(在传输中篡改):),在我看来,这个特定的用例可以通过相互SSL解决
consumer_secret,可以为每个应用程序颁发SSL证书.虽然客户端ssl证书的这种想法可能看起来像20世纪90年代的互联网奥秘,但它并不成功,主要是因为验证客户端证书的信任链存在问题.这个问题不会出现在这里,因为twitter将是证书的唯一发行者和验证者.缺点是更多地涉及代表Twitter生成初始应用程序/客户端ssl证书的努力,但回报将是REST API的简单性,这可以依赖于客户端是他所说的人的保证.
请注意,在这种情况下,twitter只是一个例子.AFAIK,大多数其他oauth实现者使用类似的策略,这里的要点适用于已经强制要求SSL的任何大型OAuth实现者.
我在这里错过了什么?互联网惯性?
ssl restful-authentication oauth client-certificates twitter-oauth
我一直在使用Twitter Oauth API从我的php应用程序将推文发布到Twitter时间轴。运行良好。
<?php
$tweet = new TwitterOAuth($consumerKey, $consumerSecret, $OAuthToken, $OAuthSecret);
$message = "This is a test message.";
$tweet->post('statuses/update', array('status' => "$message"));
?>
Run Code Online (Sandbox Code Playgroud)
但是我想知道,是否有一个API可以将推文发布到我的朋友的时间轴上(我正在Twitter上关注的人)?还是twitter API仅允许将推文发布到经过身份验证的用户的时间轴上?
我正在使用这个npm包对Twitter用户进行OAuth Echo验证:https://github.com/ciaranj/node-oauth
有没有人有一个如何使用此包来验证用户凭据的示例?
据我所知,我正在从iOS应用程序正确获取X-Auth-Service-Provider和X-Verify-Credentials-Authorization,但我在使用这个程序包时遇到问题.
这是OAuthEcho构造函数:
var oauthEcho = new OAuthEcho(
"https://twitter.com",
"https://api.twitter.com/1.1/account/verify_credentials.json",
app.config.twitter.consumer_key,
app.config.twitter.consumer_private_key,
"1.0A",
"HMAC-SHA1"
);
Run Code Online (Sandbox Code Playgroud)
真的很感激任何帮助!
谢谢!!
我正在尝试使用twitteroauth与最新版本分享帖子.以下是我的代码.
require APP."Vendor/twitteroauth-master/autoload.php"; // twitter v0.5.1 SDK
if(isset($_REQUEST['oauth_verifier'])) {
$request_token = [];
$request_token['oauth_token'] = $this->Session->read('twtr_oauth_token');
$request_token['oauth_token_secret'] = $this->Session->read('twtr_oauth_token_secret');
/* If denied, bail. */
if (isset($_REQUEST['denied'])) {
exit('Permission was denied. Please start over.');
}
/* If the oauth_token is not what we expect, bail. */
if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token']) {
$this->Session->write("twtr_oauth_token" , '');
$this->Session->write("twtr_oauth_token_secret" , '');
exit;
}
debug($request_token);
/* Create TwitteroAuth object with app key/secret and token key/secret from default phase */
$connection = new TwitterOAuth("KEY", …Run Code Online (Sandbox Code Playgroud) 我几周前开始开发我的第一个IOS应用程序,它需要Twitter和Facebook登录.
我对两个平台在安全/身份验证方面采取的不同方法感到非常惊讶.
Facebook使用IOS Bundle ID方法,这看起来很棒,因为每个Bundle ID都是唯一的,你不能代表另一个用户发布应用Bundle ID,所以Facebook很容易弄清楚你是不是自己就是这样.
Twitter使用他在IOS中的Web/REST应用程序中使用的传统密钥/密钥对,而它适用于Web,因为您不需要将这些密钥暴露给客户端,而IOS应用程序则不然.
"要使用您的应用程序凭据初始化Twitter工具包,请将它们传递给startWithConsumerKey:consumerSecret:"
"调用startWithConsumerKey:consumerSecret:将覆盖任何自动配置的键.自动配置的键位于应用程序的Info.plist键下"
我的理解是,即使我使用我的密钥,或者我使用Fabric生成的密钥,这些密钥也会暴露在plist上,这是一种存储私钥的非安全方法.
我相信我在这里遗漏了一些东西,请告诉我它是如何工作的.
我的应用程序需要一个Twitter帐户来创建帐户和身份验证.然后,用户可以根据自己的喜好链接任何其他Twitter帐户.因此,用户有一个主要的Twitter帐户,允许他连接到我的应用程序,然后,他可以浏览他之前在应用程序中链接的所有帐户.我的问题是Twitter方面的登录过程.
首先,我考虑过force_login只在连接新帐户时进行设置.这样,用户每次想要连接到我的应用程序时都不必在Twitter上重新连接.并且,当他想要链接另一个帐户时,force_login强迫他选择正确的帐户.问题是Twitter保持连接到最后一个认证帐户.因此,如果用户在链接另一个帐户后立即从我的应用程序注销,然后使用Twitter登录,则使用第二个帐户登录,并在我的应用程序上创建新用户.例:
用户有两个推特账号:@a和@b.他用@a对Twitter进行了身份验证.他注册到我的应用程序,Twitter向他显示我的应用程序询问的权限,用户接受,他被重定向到我的应用程序,一个可以用@a创建的新用户.然后,他链接@b帐户.感谢force_login,Twitter要求他提供证书.用户登录@b,Twitter询问权限,然后该帐户链接到我的应用程序上的用户.我们现在有一个用户可以使用@a进行身份验证,并且该用户可以链接到@b.然后,我的应用程序上的会话结束,用户需要重新连接.因为没有force_login,Twitter看到他已经与一个为我的应用程序授权的帐户连接,因此无需用户采取任何操作即可接受连接.但是,没有人看到的是用户与最后一个帐户连接:@b.所以,我得到了@b的登录动作,这意味着新的用户创建.我现在有两个用户:User1可以使用@a进行身份验证并链接到@b,而User2可以使用@b进行身份验证.我的用户不明白它的@a帐户在哪里.
所以我的问题是:我必须在force_login任何地方设置吗?或者还有另一种方法可以告诉Twitter在链接帐户时不进行身份验证吗?
这并不容易.请记住,许多用户应该管理同一个帐户.一个简单的例子:@Maurice和@Roy是@ReynholmIndustries公司的成员.他们将在Twitter上使用自己的帐户在我的服务上创建自己的帐户.所以在我的服务上,我会有User1可以连接@Maurice和User2,可以连接@Roy.然后,@ Maurice将@ReynholmIndustries帐户添加到我的服务中.因此,在使用@Maurice登录后,他可以管理@Maurice和@ReynholmIndustries.然后,@ Roy将添加@ReynholmIndustries.没有人可以使用@ReynholmIndustries登录,但是@Maurice和@Roy,他们自己的帐户可以管理它.然后,显然有人可以通过注册@ReynholmIndustries来创建新用户.
难点在于添加新帐户:UserA通过在Twitter上登录来登录我的服务.他现在已经被认证为@Maurice并且作为UserA服务并且可以管理@Maurice.然后,他通过在Twitter上登录@ReynholmIndustries添加了@ReynholmIndustries.他现在已经在@Maurice的服务上获得认证,可以管理@Maurice和@ReynholmIndustries,但在Twitter上,他现在已经被认证为@ReynholmIndustries.后来,他失去了我的服务认证,他点击登录按钮.他被重定向到twitter oauth表格,我们现在有两个选择:
通过写这个,我意识到这不是一个问题:如果我的服务有本地身份验证,用户每次输入auth时都应该输入login/pass ...也许force_login真的是正确的选项.你怎么看待这一切?
twitter-oauth ×10
twitter ×8
php ×4
ios ×2
cakephp-2.0 ×1
login ×1
node.js ×1
oauth ×1
objective-c ×1
plist ×1
ssl ×1