gpt4 book ai didi

ios - 如何使用 SLRequest 获取 twitter 时间线

转载 作者:可可西里 更新时间:2023-11-01 05:56:01 26 4
gpt4 key购买 nike

我正在尝试将 Twitter 时间轴添加到我的 iOS 应用程序中。推特在这里给出了官方的示例代码: https://dev.twitter.com/docs/ios/making-api-requests-slrequest
我的问题是:在第 70 行

if (timelineData) {
NSLog(@"Timeline Response: %@\n", timelineData);
}

时间线数据成功打印到控制台。我尝试添加

self.dict = timelineDate;

return self.dict;

在函数的末尾,但实际上它返回一个空字典。我注意到这个过程是在另一个线程中完成的,所以我尝试了

dispatch_async(dispatch_get_main_queue(), ^{
self.dict = timelineDate;
};

但是还是不行。这可能很容易解决,但我真的无法从 Apple 或 Twitter 找到任何资源。谁能帮忙?

最佳答案

我使用此功能在我的应用程序中加载推文(与 twitter api v1.1 兼容,但需要在设备中同步 twitter 帐户。)我正在使用 TWRequest 执行此操作,您也可以使用 SLRequest 执行相同的操作。

//include twitter.framework 
#import <Twitter/Twitter.h>

+ (void)getTweetsFortwitterID:(NSString *)twitterID

{
if(twitterID.length >0)
{
NSString * finalURL = [NSString stringWithFormat:@"https://api.twitter.com/1.1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=%@&count=10", twitterID];

TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:finalURL] parameters:nil requestMethod:TWRequestMethodGET];

ACAccountStore *accountStore = [[ACAccountStore alloc] init] ;

ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

// Request access from the user to use their Twitter accounts.
[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error)
{
if(granted)
{
NSArray *twitterAccounts = [accountStore accountsWithAccountType:accountType];

if([twitterAccounts count] >0
)
{
ACAccount *twitterAccount = [twitterAccounts objectAtIndex:0];
[postRequest setAccount:twitterAccount];

NSLog(@"request.account:%@",postRequest.account);

// Perform the request created above and create a handler block to handle the response.
NSMutableArray *tweetsArray=[[NSMutableArray alloc]init];

[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {

// Parse the responseData, which we asked to be in JSON format for this request, into an NSDictionary using NSJSONSerialization.
NSArray *publicTimeline = nil;
NSError *jsonParsingError = nil;
if (responseData)
{
publicTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonParsingError];
NSLog(@"publicTimeline : %@", publicTimeline);
}

if ([publicTimeline isKindOfClass:[NSArray class]])
{

for (int i =0; i<[publicTimeline count]; i++)
{
NSMutableDictionary *twitterDict=[[NSMutableDictionary alloc]init];

if ([[publicTimeline objectAtIndex:i] objectForKey:@"text"])
{
NSLog(@"ID: %@", [[publicTimeline objectAtIndex:i] objectForKey:@"text"]);
[twitterDict setObject:[[publicTimeline objectAtIndex:i] objectForKey:@"text"] forKey:@"text"];
}
if ([[publicTimeline objectAtIndex:i] objectForKey:@"created_at"])
{
NSLog(@"ID: %@", [[publicTimeline objectAtIndex:i] objectForKey:@"created_at"]);
[twitterDict setObject:[[publicTimeline objectAtIndex:i] objectForKey:@"created_at"]
forKey:@"created_at"];
}

if ([[publicTimeline objectAtIndex:i] objectForKey:@"user"])
{
NSLog(@"ID: %@", [[publicTimeline objectAtIndex:i] objectForKey:@"created_at"]);
[twitterDict setObject:[[[publicTimeline objectAtIndex:i] objectForKey:@"user"]objectForKey:@"profile_image_url"]
forKey:@"profile_image_url"];
}


[tweetsArray addObject:twitterDict];
NSLog(@"tweets:%@", tweetsArray);

}
}

if([tweetsArray count]>0)
[[NSNotificationCenter defaultCenter] postNotificationName:@"tweetsLoaded" object:tweetsArray];


}];
}

}

}];
}


}

希望有用。

关于ios - 如何使用 SLRequest 获取 twitter 时间线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16104704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com