Twitter検索してラベルに表示
Twitter検索して出てきた新しいツイート3件をラベルに表示します。
テーブルじゃなくてもできるってことで。TextFieldに違う文字列を入力してもちゃんと更新されます。
これもまたサンプルは後日。
先にTextFieldとLabelを用意して、AccountsFrameworksとTwitterFrameworksを追加しておきます。
これもUITextFiledに入力した文字を検索文字列に突っ込む処理はUITextFiledのActionで行います。
・ViewController.h
#import <UIKit/UIKit.h> #import <Accounts/Accounts.h> #import <Twitter/Twitter.h> @interface ViewController : UIViewController { NSMutableArray *tweetTextArray; ACAccount *account; ACAccountType *accountType; ACAccountStore *accountStore; NSString *str; NSString *searchString; } @property (weak, nonatomic) IBOutlet UITextField *SerchText; @property (weak, nonatomic) IBOutlet UILabel *text1; @property (weak, nonatomic) IBOutlet UILabel *text2; @property (weak, nonatomic) IBOutlet UILabel *text3; - (IBAction)closeText:(id)sender; - (void)loadTimeline; @end
・ViewController.m
#import "ViewController.h" @interface ViewController () @end @implementation ViewController @synthesize SerchText; @synthesize text1; @synthesize text2; @synthesize text3; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. accountStore = [[ACAccountStore alloc] init]; accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; } - (void)viewDidUnload { [self setSerchText:nil]; [self setText1:nil]; [self setText2:nil]; [self setText3:nil]; [super viewDidUnload]; // Release any retained subviews of the main view. } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } - (void)loadTimeline { tweetTextArray = [[NSMutableArray alloc] initWithCapacity:0]; [accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) { if (granted) { if (account == nil) { NSArray *accountArray = [accountStore accountsWithAccountType:accountType]; account = [accountArray objectAtIndex:0]; } if (account != nil) { //以下、URLを指定→そこにアクセスする設定をする→アクセスする //検索語を指定する。日本語を検索する場合は、UTF-8でURLエンコードした文字列を渡す //英語で入力しても大丈夫 //UTF-8でURLエンコード NSString* encodStr = [searchString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //URLを指定 NSString *urlString = [NSString stringWithFormat:@"http://search.twitter.com/search.json?q=%@&rpp=20",encodStr]; //URLWithStringでNSURLのインスタンスを生成 NSURL *url = [NSURL URLWithString:urlString]; //NSURLRequestとurlStringで設定したアドレスにアクセスする設定をする NSURLRequest *request = [NSURLRequest requestWithURL:url]; //NSURLConnectionで実際にアクセスする [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { if (error) { NSLog(@"error: %@", [error localizedDescription]); return; } //jsonで解析する NSDictionary *dictionary =[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; //resultsにTweetが配列の形で入っている NSArray *tweets = [dictionary objectForKey:@"results"]; //Tweetをひとつずつ取り出して表示する準備をする for (NSDictionary *tweet in tweets) { [tweetTextArray addObject:[tweet objectForKey:@"text"]]; str = [tweetTextArray componentsJoinedByString:@","]; } //検索結果の上から3件を取り出して、ラベルに表示 //ひとつ目のツイートを取り出す NSString *strlist = [tweetTextArray objectAtIndex:0]; //ふたつ目のツイートを取り出す NSString *strlist2 = [tweetTextArray objectAtIndex:1]; //3つ目のツイートを取り出す NSString *strlist3 = [tweetTextArray objectAtIndex:2]; text1.text = strlist; text2.text = strlist2; text3.text = strlist3; /* //オマケ。もし「まどか」または「魔女」があったら、これらを「ほむら」に書き換える NSString *template = @"ほむら"; NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:@"(まどか|魔女)" options:0 error:nil]; NSString *replaced = [regexp stringByReplacingMatchesInString:strlist options:0 range:NSMakeRange(0,strlist.length) withTemplate:template]; NSLog(@"%@",replaced); */ }]; } } }]; } - (IBAction)closeText:(id)sender { searchString = SerchText.text; [self loadTimeline]; } @end