2017-11-07 10 views
1

こんにちは、盗んつぶやき情報TWTRTimelineViewControllerでタイムラインから(テキスト&イメージ) - Objective Cの

は、私はそこに見つけTwitterのドキュメントのおかげでログインするようにユーザーに要求するアプリを持っている:Log in with twitter。その後、ユーザーのタイムラインを正常に読み込むことができます。このタイムラインはNavigationControllerにロードされ、TWTRTimelineViewControllerのインターフェイスを持ちます。さて、1人のユーザーがつぶやきに指をかざしたり、1つのつぶやきをクリックするだけで、Safariを表示するのではなく、クリックした後につぶやくことができるボタンがポップアップします。私は、テキストとツイートの画像にアクセスする必要があります。 私は、すべてのつぶやきをTWTRTweetViewコントローラーに委譲する必要がありますが、私は全く新しいので、どうしたらいいのか分かりません。私は文書を読もうとしましたが、本当にそれを得ることはできませんでした。そして、例のほとんどはSwiftに書かれています。私はツイートのプロパティにどのようにアクセスするのかもわかりません。私は試したSTTwitter私はいくつかのJSON形式のテキストで遊んだ場所と私はテキストと画像のURLを取得することができたが、私は直接それを行う方法を把握することはできませんTwitterKit。タイムラインを表示するコントローラーの実際のコードは次のとおりです。

#import "TwitterTimelineViewController.h" 
#import <TwitterKit/TwitterKit.h> 
#import "AppDelegate.h" 

@interface TwitterTimelineViewController() 
@property (strong, nonatomic) IBOutlet UITableView *TwitterTableView; 
@end 

@implementation TwitterTimelineViewController 

TWTRUserTimelineDataSource *userTimelineDataSource; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    AppDelegate *delegate=(AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    [[Twitter sharedInstance] startWithConsumerKey:@"myConsumerKey" consumerSecret:@"myConsumerSecretKey"]; 

    TWTRAPIClient *APIClient = [[TWTRAPIClient alloc] init]; 
    userTimelineDataSource = [[TWTRUserTimelineDataSource alloc] initWithScreenName:delegate.twitterUsername APIClient:APIClient]; 
    self.dataSource = userTimelineDataSource; 
} 

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options { 
    return [[Twitter sharedInstance] application:app openURL:url options:options]; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

素晴らしいヘルプがあります。

乾杯、 Theo。

答えて

0

自分自身で答えを見つけました。同じ問題で苦労している人のために、私が書いたコードはここにあります。ちょっと面倒ですが、うまくいきます。

-(IBAction)ShowTweets: (id) sender{ 

UIButton *clicked = (UIButton *) sender; 

NSString *tweetToDecryptIndex = [NSString stringWithFormat: @"%ld", (long)clicked.tag]; 

//gets all tweets from current timeline 
NSArray *allTweets = self.snapshotTweets; 

//look the tweets, get the URL and removes it to get the text only 
NSDataDetector *detect = [[NSDataDetector alloc] initWithTypes:NSTextCheckingTypeLink error:nil]; 

    //gets the single tweet from clicked button 
    TWTRTweet *tweet = [allTweets objectAtIndex:(long)clicked.tag]; 
    NSString *content = tweet.text; //gets the text 
    NSDataDetector *linkDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil]; 
    NSArray *matches = [linkDetector matchesInString:content options:0 range:NSMakeRange(0, [content length])]; //find the URL 

    NSURL *url; //contains the url from the text of the tweet 
    NSString *ciph; //text from tweet without the url 

    for (NSTextCheckingResult *match in matches) { 
     if ([match resultType] == NSTextCheckingTypeLink) { 
      url = [match URL]; 
      ciph = [content substringToIndex:content.length-url.absoluteString.length]; 
     } 
    } 

    //Now, ask a JSON answer from twitter of the specific tweet using its ID 
    TWTRAPIClient *client = [[TWTRAPIClient alloc] init]; 
    NSString *statusesShowEndpoint = @"https://api.twitter.com/1.1/statuses/show.json"; 
    NSDictionary *params = @{@"id" : tweet.tweetID}; 
    NSError *clientError; 

    NSURLRequest *request = [client URLRequestWithMethod:@"GET" URL:statusesShowEndpoint parameters:params error:&clientError]; 

    if (request) { 
     [client sendTwitterRequest:request completion:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 
      if (data) { 
       NSError *jsonError; 
       NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError]; 

       //NSLog(@"%@", json); 
       //looking for the media_url 
       NSString *media = [json valueForKeyPath:@"entities.media"]; 
       NSArray *urlArray = [media valueForKey:@"media_url_https"]; 

       //finally getting the url as a string 
       NSMutableString * urlOfImageString = [[NSMutableString alloc] init]; 
       for (NSObject * obj in urlArray) 
       { 
        [urlOfImageString appendString:[obj description]]; 
       } 

       //NSLog(@"%@",urlOfImageString); 

       //constructing name for image to write in path 
       NSString *tweetID = tweet.tweetID; 
       NSString *imgName = [tweetID stringByAppendingString:@".jpg"]; 
       NSString *tmp = [@"/your/path" stringByAppendingString:imgName]; 

       //NSLog(@"%@", tmp); 

       //Now writting the image 
       NSURL *urlOfImageUrl = [NSURL URLWithString:urlOfImageString]; 
       NSData *imageData = [NSData dataWithContentsOfURL:urlOfImageUrl]; 
      } 
      else { 
       NSLog(@"Error: %@", connectionError); 
      } 
     }]; 
    } 
    else { 
     NSLog(@"Error: %@", clientError); 
    } 
+0

どのようにゲスト認証を行うことができますか? – Balasubramanian

関連する問題