2015-02-23 2 views
4

Я пытаюсь опубликовать изображение и твит с помощью Twitters new TwitterKit с пользовательским интерфейсом. Единственная документация, которую они предоставляют, - как это сделать с их представлениями.Проводка изображения в twitter с помощью twitterkit

, так что я могу понять, как сделать это без изображения

NSMutableDictionary *message = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[params objectForKey:@"description"],@"status",@"true",@"wrap_links", nil]; 

NSURLRequest* request = [twAPIClient URLRequestWithMethod:@"POST" URL:@"https://api.twitter.com/1.1/statuses/update.json" parameters:message error:nil]; 

[twAPIClient sendTwitterRequest:request completion:^(NSURLResponse* response, NSData* data, NSError* connectionError){ 



}]; 

Но их метод URLRequestWithMethod Isnt изменчивой. как бы добавить изображение к нему. Вы использовали это с SLRequest с

[postRequest addMultipartData:UIImageJPEGRepresentation(image, 0.5) withName:@"media" type:@"image/jpeg" filename:@"image.png"]; 

ответ

7

Я понял это.

Для начала необходимо разместить свое изображение в twitter.

NSString *media = @"https://upload.twitter.com/1.1/media/upload.json"; 

NSData *imageData = UIImageJPEGRepresentation(image, 0.9); 

NSString *imageString = [corgiData base64EncodedStringWithOptions:0];    

NSURLRequest *request = [client URLRequestWithMethod:@"POST" URL:media parameters:@{@"media":imageString} error:&requestError]; 

[[[Twitter sharedInstance] APIClient] sendTwitterRequest:request completion:^(NSURLResponse *urlResponse, NSData *data, NSError *connectionError) { 


}]; 

то в объекте ответа вы используете media_id_string и добавляете это к параметру кода в моем вопросе.

Так

NSMutableDictionary *message = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[params objectForKey:@"description"],@"status",@"true",@"wrap_links",mediaIDString, @"media_ids", nil]; 

NSURLRequest* request = [twAPIClient URLRequestWithMethod:@"POST" URL:@"https://api.twitter.com/1.1/statuses/update.json" parameters:message error:nil]; 

[twAPIClient sendTwitterRequest:request completion:^(NSURLResponse* response, NSData* data, NSError* connectionError){ 

NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&parsingError]; 

}]; 

примечание в media_ids возразить, что от ответа на первый запрос

NSMutableDictionary *message = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[params objectForKey:@"description"],@"status",@"true",@"wrap_links",[responseDict objectForKey:@"media_id_string"], @"media_ids", nil]; 

Таким образом, вы можете просто положить, что внутри блока завершения, и он будет размещать изображение и чирикать ,

+0

Привет, что 'corgiData' и' под клиентом переменный? –

2

Swift

func post (tweetString: String, tweetImage: NSData) { 

    let uploadUrl = "https://upload.twitter.com/1.1/media/upload.json" 
    let updateUrl = "https://api.twitter.com/1.1/statuses/update.json" 
    let imageString = tweetImage.base64EncodedStringWithOptions(NSDataBase64EncodingOptions()) 
    let request = Twitter.sharedInstance().APIClient.URLRequestWithMethod("POST", 
     URL: uploadUrl, parameters: ["media": imageString], error: nil) 
    Twitter.sharedInstance().APIClient.sendTwitterRequest(request, completion: { (urlResponse, data, connectionError) -> Void in 

     if let mediaDict = self.nsdataToJSON(data!) { 
      let validTweetString = TweetValidator().validTween(tweetString) 
      let message = ["status": validTweetString, "media_ids": mediaDict["media_id_string"]] 
      let request = Twitter.sharedInstance().APIClient.URLRequestWithMethod("POST", 
       URL: updateUrl, parameters: message, error:nil) 

       Twitter.sharedInstance().APIClient.sendTwitterRequest(request, completion: { (response, data, connectionError) -> Void in 
      }) 
     } 
    }) 
} 

func nsdataToJSON (data: NSData) -> AnyObject? { 
    do { 
     return try NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers) 
    } catch let myJSONError { 
     print(myJSONError) 
    } 
    return nil 
} 
3

По состоянию на апрель 2016 года около, Ткань-х TwitterKit 2,0 (или более поздней версии) предоставляет новый метод uploadMedia, чтобы покрыть загрузку медиа-часть. Вот какой код objc работает для меня.

(earlier) 
self.userID = [[Twitter sharedInstance] sessionStore].session.userID; 

- (void)tweetImage:(UIImage*)image { 
     NSAssert([NSThread currentThread].isMainThread && self.userID, @"Twitterkit needs main thread, with self.userID set"); 
     if (!self.userID) 
      return; 
     NSString *tweetStr = @"Look at me! I'm tweeting! #hashtag"; 

     TWTRAPIClient *twitterClient = [[TWTRAPIClient alloc] initWithUserID:self.userID]; 
     NSData *imgData = UIImageJPEGRepresentation(image, 0.6f); 
     if (!imgData) { 
      NSAssert(false, @"ERROR: could not make nsdata out of image"); 
      return; 
     } 
     [twitterClient uploadMedia:imgData contentType:@"image/jpeg" completion:^(NSString * _Nullable mediaID, NSError * _Nullable error) { 
      if (error) { 
       NSAssert(false, @"ERROR: error uploading collage to twitter"); 
       return; 
      } 

      NSError *urlerror = nil; 
      NSURLRequest *request = [twitterClient URLRequestWithMethod:@"POST" URL:@"https://api.twitter.com/1.1/statuses/update.json" parameters:@{ @"status":tweetStr, @"media_ids":mediaID } error:&urlerror]; 
      if (urlerror) { 
       NSAssert(false, @"ERROR creating twitter URL request: %@", urlerror); 
       return; 
      } 
      [twitterClient sendTwitterRequest:request completion:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { 
       if (!connectionError && ((NSHTTPURLResponse*)response).statusCode != 200) { 
        DDLogInfo(@"TwitterHelper tweetImage: non-200 response: %d. Data:\n%@", (int)((NSHTTPURLResponse*)response).statusCode, [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); 
       } 
      }]; 
     }]; 
    } 
+0

Очень хорошее спасибо: D – Claudio

0

Swift 3 последних

1) Проверьте Войти выполняется или не

let store = Twitter.sharedInstance().sessionStore 
if let store = store.session() { 
    print("signed in as \(String(describing: store.authToken))"); 
    print("signed in as \(String(describing: store.authTokenSecret))"); 
    let postImage = UIImage(named: "testImage") 
    let imageData = UIImagePNGRepresentation(postImage!) as Data? 

    self.post(tweetString: "Test post image", tweetImage: (imageData! as NSData) as Data, withUserID: store.userID) 
} 
else { 
    Twitter.sharedInstance().logIn(completion: { (session, error) in 
     if (session != nil) { 
      print("login first time in twitter as \(String(describing: session?.userName))"); 
     } else { 
      print("error: \(String(describing: error?.localizedDescription))"); 
     } 
    }) 
} 

2) Для того, чтобы загрузить изображение с текстом

func post(tweetString: String, tweetImage: Data ,withUserID :String) { 

     let uploadUrl = "https://upload.twitter.com/1.1/media/upload.json" 
     let updateUrl = "https://api.twitter.com/1.1/statuses/update.json" 
     let imageString = tweetImage.base64EncodedString(options: NSData.Base64EncodingOptions()) 


     let client = TWTRAPIClient.init(userID: withUserID) 

     let requestUploadUrl = client.urlRequest(withMethod: "POST", url: uploadUrl, parameters: ["media": imageString], error: nil) 

     client.sendTwitterRequest(requestUploadUrl) { (urlResponse, data, connectionError) -> Void in 
      if connectionError == nil { 
       if let mediaDict = self.nsDataToJSON(data: (data! as NSData) as Data) as? [String : Any] { 
        let media_id = mediaDict["media_id_string"] as! String 
        let message = ["status": tweetString, "media_ids": media_id] 

        let requestUpdateUrl = client.urlRequest(withMethod: "POST", url: updateUrl, parameters: message, error: nil) 

        client.sendTwitterRequest(requestUpdateUrl, completion: { (urlResponse, data, connectionError) -> Void in 
         if connectionError == nil { 
          if let _ = self.nsDataToJSON(data: (data! as NSData) as Data) as? [String : Any] { 
           print("Upload suceess to Twitter") 
          } 
         } 

        }) 
       } 
      } 
     } 
    } 

Примечания: установить стручок файл стручка 'TwitterKit'

импорт TwitterKit

Смежные вопросы