gpt4 book ai didi

ios - 如何从推特提要中获取 "images"以显示在 iOS 应用程序中

转载 作者:行者123 更新时间:2023-11-28 21:45:43 25 4
gpt4 key购买 nike

我有一个代码可以访问 Twitter 提要并将文本放入表格中。然后我编辑了代码,这样我就可以在单独的 View 中以我的自定义方式显示文本,但我也想从推文中抓取图像,尽管搜索了一个多小时也找不到一个引用。我已经看到了如何“发布”图片,但需要明确的是,我需要从相关推文中获取并“显示”图片。

以下是我处理 Twitter 访问的代码中的要点:

-(void)twitterTimeLine
{
ACAccountStore *account = [[ACAccountStore alloc] init];

ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

[account requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error) {
if (granted == YES)
{
NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];

if ([arrayOfAccounts count] > 0)
{
ACAccount *twitterAccount = [arrayOfAccounts lastObject]; // last account on list of accounts
NSURL *requestAPI = [NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/user_timeline.json"];


NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];

[parameters setObject:@"30" forKey:@"count"];

[parameters setObject:@"1" forKey:@"incude_entities"];

SLRequest *posts = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodGET URL:requestAPI parameters:parameters];

posts.account = twitterAccount;

[posts performRequestWithHandler:^(NSData *response, NSHTTPURLResponse *urlResponse, NSError *error) {
if (response)
{
// TODO: might want to check urlResponse.statusCode to stop early
NSError *jsonError; // use new instance here, you don't want to overwrite the error you got from the SLRequest
NSArray *array =[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&jsonError];
if (array) {
if ([array isKindOfClass:[NSArray class]]) {
self.array = array;
NSLog(@"resulted array: %@",self.array);
}
else {
// This should never happen
NSLog(@"Not an array! %@ - %@", NSStringFromClass([array class]), array);
}
}
else {
// TODO: Handle error in release version, don't just dump out this information
NSLog(@"JSON Error %@", jsonError);
NSString *dataString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSLog(@"Received data: %@", dataString ? dataString : response); // print string representation if response is a string, or print the raw data object
}
}
else {
// TODO: show error information to user if request failed
NSLog(@"request failed %@", error);
}

self.array = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];

if (self.array.count != 0)
{
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData]; // this part loads into table - important!
});

}
}];
}
}
else
{
NSLog(@"%@", [error localizedDescription]);
}

}];
}

这是我显示推文的方式

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellID = @"cellID";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];

if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
}

NSDictionary *tweet = _array[indexPath.row];

cell.textLabel.text = tweet[@"text"];
//NSString *element = [myArray objectAtIndex:2];
//NSString *element = myArray[2];


// I created some custom views to show the text, but kept the table for testing purposes
TemplateView *tempView = [viewArray objectAtIndex:testCounter];
tempView.TweetView.text = tweet[@"text"];
// -> this was what I was hoping for // tempView.ContentView.image = tweet[@"image"];
testCounter++;
if (testCounter >= 30)
{
testCounter = 0;
}

return cell;
}

我把我认为需要看的关键行去掉了:

tempView.TweetView.text = tweet[@"text"];
tempView.ContentView.image = tweet[@"image"];

//希望后者能像第一个那样工作,但显然没那么简单

这可能是不可能的,如果是这样,我如何从“链接”(url)获取图像并确保它是图像而不是视频或其他网站?

我可以设置一个“单词搜索”来从推文中获取以 http 开头的文本,并希望从字符串中生成一个 URL

最佳答案

TwitterKit 似乎不公开支持图片。我遇到了同样的愚蠢问题。当使用内置的 tableview 和数据源时,API 在内部保存图像。它需要一个 listID 和一个 Slug。但是,当你想要通过 JSON 获取图像时,你就不走运了!甚至 TWTRTweet 对象也没有实体或媒体属性!

不知道怎么会有人开发出如此糟糕的 API。无论如何,我逆向了内部进行的服务器调用,发现它发送了其他“未记录”的参数。

例子:

TWTRAPIClient *client = [[TWTRAPIClient alloc] init];

NSString *endpoint = @"https://api.twitter.com/1.1/statuses/user_timeline.json";

NSDictionary *params = @{@"screen_name":@"SCREEN_NAME_HERE",
@"count": @"30"};

将返回 NO MEDIA.. 即使你有 @"include_entities": @"true"

解决方法:

TWTRAPIClient *client = [[TWTRAPIClient alloc] init];

NSString *endpoint = @"https://api.twitter.com/1.1/statuses/user_timeline.json";

NSDictionary *params = @{@"screen_name":@"SCREEN_NAME_HERE",
@"count": @"30",
@"tweet_mode": @"extended"};

tweet_mode 设置为 extended(tweet_mode 是一个未记录的参数),它现在将返回媒体作为响应的一部分。这包括“类型”,即图像的“照片”。

关于ios - 如何从推特提要中获取 "images"以显示在 iOS 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241431/

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