簡體   English   中英

Twitter流API-Objective-C

[英]Twitter Streaming API - Objective-C

我正在使用Twitter REST / Streaming API 當我想訪問REST API時,我創建了一個NSMutableURLRequest (包含訪問令牌和查詢之類的參數)。 然后,我將請求與NSURLSession結合使用以加載數據。 我正在使用為我創建可變請求對象的庫(如果我不使用請求對象,那么Twitter API將不允許我訪問相關的用戶數據)。

現在,我正在嘗試通過流API加載Twitter時間軸。 我遇到的一個問題是我無法弄清楚如何將自定義可變請求對象與NSStream對象一起使用。 我唯一能做的就是設置host URL鏈接。 但這還不夠好,因為我需要傳遞用戶OAuth數據(包含在可變請求對象中),以便Twitter API允許我訪問用戶數據。

如何將請求對象附加到流? 這是我的代碼:

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];

UPDATE

由於Twitter API的更改,流式API將不再可用。 我將在這里保留我的答案,以防萬一有人仍在使用流API,但是該API的使用時間不會更長。 相反,您必須每隔幾秒/分鍾手動刷新一次所需的數據-刷新數據的頻率取決於您的用戶群,用戶群越大,刷新間隔應該越長。

我的解決方案

我設法解決了我的問題。 我嘗試了從CFStream到Web套接字庫的許多解決方案....才發現Twitter Streaming API不支持套接字.....一個好的開始!

我最終使用NSURLSession及其關聯的委托方法,從Twitter API設置和加載連續的數據流。 完美工作,並且非常容易設置:

在標題中設置委托: <NSURLSessionDelegate>

以下代碼中的request是我創建的NSURLRequest對象,該對象存儲Twitter流URL,查詢參數和用戶OAuth身份驗證標頭數據。

創建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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM