3

アプリで使用するために Twitter から accessToken 値を取得しようとしています ( GET statuses/user_timelineには API v1.1 の認証モデルを使用する必要があります)。api.twitter.com にアプリを登録し、プロジェクトにAFOAuth1Clientクラスをインポートしました。これは単純なコードです。

- (void)viewDidLoad
{
    self.twitterClient = [[AFOAuth1Client alloc] initWithBaseURL:
                                     [NSURL URLWithString:@"https://api.twitter.com/"] key:@"MYKEY" secret:@"MYSECRETKEY"];
    AFOAuth1Token *accessToken;

    [self.twitterClient acquireOAuthAccessTokenWithPath:@"oauth/request_token" requestToken:accessToken accessMethod:@"GET" success:^(AFOAuth1Token *accessToken) { // I have tried also accessMethod: @"POST"
        NSLog(@"Success: %@", accessToken);
    } failure:^(NSError *error) {
        NSLog(@"Error: %@", error);
    }];
}

残念ながら、XCode で次のエラーが表示されます。

Error: Error Domain=AFNetworkingErrorDomain Code=-1011 "Expected status code in (200-299), got 401" UserInfo=0x79a14f0 {NSLocalizedRecoverySuggestion=Failed to validate oauth signature and token, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0x7956390>

ここで何が問題なのですか?api.twitter.comでアプリを登録する必要がありますか? それは正しい方法ですか、またはiOS で API v1.1 の Twitter 認証モデルを使用してstatuses/user_timeline を取得するより簡単な方法は何ですか? ありがとうございました!

編集:可能なウェイポイント?

1) dev.twitter.com で新しいアプリを登録する

2) OAuth 設定で、コンシューマ キーとコンシューマ シークレットを読み取ります

3) デフォルトのアプリ アクセス タイプを読み取りに設定しますか? または読み取り/書き込み?アクセストークンを要求しますか? この値を使用して.... ?

4

3 に答える 3

21

Twitterがアプリケーション専用モードを追加してから数日が経ちました。このモードでは、ユーザーのコンテキストなしで特定のAPIエンドポイントにアクセスできます。ユーザーは認証する必要はありません。アプリケーションのみが時々認証して「ベアラートークン」を取得し、それがすべてのリクエストで送信されます。

次のコードは、ベアラートークンを取得してから、@barackobamaのパブリックタイムラインを取得します。

STTwitterAPI *twitter = [STTwitterAPI twitterAPIApplicationOnlyWithConsumerKey:@""
                                                                consumerSecret:@""];

[twitter verifyCredentialsWithSuccessBlock:^(NSString *bearerToken) {

    NSLog(@"Access granted with %@", bearerToken);

    [twitter getUserTimelineWithScreenName:@"barackobama" successBlock:^(NSArray *statuses) {
        NSLog(@"-- statuses: %@", statuses);
    } errorBlock:^(NSError *error) {
        NSLog(@"-- error: %@", error);
    }];

} errorBlock:^(NSError *error) {
    NSLog(@"-- error %@", error);
}];

実用的な例については、 STTwitter iOSデモプロジェクトを参照してください(独自のコンシューマキー/シークレットを使用してください)。

于 2013-03-14T19:58:22.733 に答える
3

独自のコンシューマ トークンがある場合は、私が書いたSTTwitter ライブラリを使用できます。

STTwitterAPI *twitter =
  [STTwitterAPI twitterAPIWithOAuthConsumerName:@""
                                    consumerKey:@"your_key"
                                 consumerSecret:@"your_secret"
                                       username:@"username"
                                       password:@"password"];

[twitter verifyCredentialsWithSuccessBlock:^(NSString *username) {

    NSLog(@"Access granted for %@", username);

    [twitter getUserTimelineWithScreenName:@"barackobama"
                              successBlock:^(NSArray *statuses) {
        NSLog(@"-- statuses: %@", statuses);
    } errorBlock:^(NSError *error) {
        NSLog(@"-- error: %@", error);
    }];

} errorBlock:^(NSError *error) {
    NSLog(@"-- error %@", error);
}];

トークンで「xAuth」が有効になっていない場合は、PIN を使用する必要があります。STTwitter は、ユーザーに尋ねる単純な非同期ブロックベースのメソッドを提供します。PIN の取得を自動化することもできます。自動化されたプロセスについては、STTwitterDemo -[AppDelegateguessPIN:]を参照してください。

于 2013-02-19T13:41:02.967 に答える
0

STTwitterの使い方は簡単です。また、公開されている Twitter タイムラインを取得できるを追加しました

于 2014-02-02T20:54:50.243 に答える