2017-07-31 8 views
0

私はTwitter REST/Streaming APIと一緒に働いています。 REST APIにアクセスするには、NSMutableURLRequest(アクセストークンやクエリなどのパラメータが含まれています)を作成します。私はNSURLSessionと一緒に要求を使用してデータを読み込みます。変更可能な要求オブジェクトを作成するライブラリを使用しています(要求オブジェクトを使用しない場合、Twitter APIは関連するユーザーデータにアクセスできません)。Twitter Streaming API - Objective-C

今、私はストリーミングAPI経由でTwitterのタイムラインを読み込もうとしています。私が抱えている問題の1つは、NSStreamオブジェクトを持つカスタムの変更可能なリクエストオブジェクトの使い方を理解できないということです。私ができるのは、host URLリンクを設定することだけです。しかし、Twitter APIがユーザーデータへのアクセスを許可するためには、ユーザーOAuthデータ(変更可能なリクエストオブジェクトに含まれています)を渡す必要があるため、これでは十分ではありません。

ストリームにリクエストオブジェクトを追加するにはどうすればよいですか?ここに私のコードです:

NSURL *website = [NSURL URLWithString:@"https://userstream.twitter.com/1.1/user.json"]; 

CFReadStreamRef readStream; 
CFWriteStreamRef writeStream; 
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)[website host], 80, &readStream, &writeStream); 

NSInputStream *inputStream = (__bridge_transfer NSInputStream *)readStream; 
NSOutputStream *outputStream = (__bridge_transfer NSOutputStream *)writeStream; 
[inputStream setDelegate:self]; 
[outputStream setDelegate:self]; 
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
[inputStream open]; 
[outputStream open]; 

答えて

1

私は私の問題を解決することができました。私はCFStreamからウェブソケットライブラリに多くのソリューションを試してみました....ただ、Twitter Streaming APIがソケットをサポートしていないことを知るには.....素晴らしいスタート!

NSURLSessionとその関連するデリゲートメソッドを使用して、Twitter APIからデータの連続ストリームをセットアップして読み込むことになりました。完璧に動作し、セットアップに信じられないほど簡単です:あなたのヘッダーにデリゲートを設定し

:以下のコードで<NSURLSessionDelegate>

requestは、TwitterのストリームのURL、クエリパラメータとユーザーOAuthを格納し、私が作成したNSURLRequestオブジェクトであり、認証ヘッダデータ。

URLリクエスト/セッションオブジェクトを作成します。

最後に
// Set the stream session. 
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil]; 

// Start the data stream. 
[[session dataTaskWithRequest:request] resume]; 

セットアップデリゲートメソッド:

-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { 

    NSError *feedError = nil; 
    NSDictionary *feed = [NSJSONSerialization JSONObjectWithData:data options:0 error:&feedError]; 
    NSLog(@"%@", feed); 
} 

-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { 

    if (error) { 
     NSLog(@"%@", error); 
    } 
} 

それです!これで、feed辞書に返されたデータを解析し、それに従ってUIを更新するだけです。

関連する問題