まゆたまガジェット開発逆引き辞典

電子工作やプログラミングのHowtoを逆引き形式で掲載しています。作りたいモノを決めて学んでいくスタイル。プログラマではないので、コードの汚さはお許しを。参照していないものに関しては、コピペ改変まったく問いません

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