Solved: OAuth Error when posting a tweet with image in JavaScript code

googleappsscript

#1

I’m using this code http://ctrlq.org/code/19702-twitter-image-upload in a Google Script file:

function oAuthConfig() {
 
  var oAuthConfig = UrlFetchApp.addOAuthService("twitter");
  oAuthConfig.setAccessTokenUrl("http://api.twitter.com/oauth/access_token");
  oAuthConfig.setRequestTokenUrl("http://api.twitter.com/oauth/request_token");
  oAuthConfig.setAuthorizationUrl("http://api.twitter.com/oauth/authorize");
 
  oAuthConfig.setConsumerKey("key");
  oAuthConfig.setConsumerSecret("secret");
 
}
 
function postImage() {
 
  oAuthConfig();
 
  var boundary = "cuthere";
  var picture = UrlFetchApp.fetch("https://exampl.com/image.png")
                           .getBlob().setContentTypeFromExtension();
  var status = "Tweet text with image upload";
 
  var requestBody = Utilities.newBlob(
    "--"+boundary+"\r\n"
    + "Content-Disposition: form-data; name=\"status\"\r\n\r\n"
    + status+"\r\n"+"--"+boundary+"\r\n"
    + "Content-Disposition: form-data; name=\"media[]\"; filename=\""+picture.getName()+"\"\r\n"
    + "Content-Type: " + picture.getContentType()+"\r\n\r\n").getBytes();
 
  requestBody = requestBody.concat(picture.getBytes());
  requestBody = requestBody.concat(Utilities.newBlob("\r\n--"+boundary+"--\r\n").getBytes());
  
  var options = {
    method: "post",
    contentType: "multipart/form-data; boundary="+boundary,
    oAuthServiceName: "twitter",
    oAuthUseToken: "always",
    payload: requestBody
  };
  var request = UrlFetchApp.fetch("https://api.twitter.com/1.1/statuses/update_with_media.json", options);
}

But I keep getting “OAuth Error”.

Thanks in advance for your help.


#2

While I couldn’t figure what the difference is, I used a modified version of the code that can be found here http://gist.github.com/yuya/8472634 and it works flawlessly.


#3

That’s great, glad it is working now and thanks for sharing the alternative code here, that will be really helpful to other developers! :thumbsup:


#4

hi,
I am using above code, but i am getting the following error -
ReferenceError: UrlFetchApp is not defined(…)


#5

You’re doing this in Google Apps Script, right? That’s what this example is for.