Проблемы с доступом к Tumblr API с помощью Apps Script - PullRequest
3 голосов
/ 20 апреля 2020

Я пытаюсь опубликовать сообщение на Tumblr с помощью Google Apps Script. Я узнал, что Tumblr использует OAuth V1. Чтобы получить представление и протестировать API, я скопировал образец кода GSuiteDevs Apps OAuth1 Twitter, доступный на Github .

, который я соответствующим образом модифицировал, когда это необходимо. После запуска сценария я получаю сообщение об ошибке 400.8001, которое согласно Документации Tumblr API связано с

", когда параметр NPF JSON недопустим или является неправильным format ".

Код и ошибка приведены ниже:

var CONSUMER_KEY = 'XXXVQoZ0kLUYB7GDHzJZcXXXXXXXXXXXXXXXXXXXXXXXX';
var CONSUMER_SECRET = 'XXXXlLVQS2z3WpXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';

/**
 * Authorizes and makes a request to the Tumblr API.
 */
function run() {
  var service = getService();
  if (service.hasAccess()) {
    var url = 'https://api.tumblr.com/v2/blog/{MY BLOG IDENTIFIER COMES HERE}.tumblr.com/posts';
    var payload = {
      "content": [
        {
            "type": "text",
            "text": "Hello world!"
        }
    ]
    };
    var response = service.fetch(url, {
      method: 'post',
      payload: payload
    });
    var result = JSON.parse(response.getContentText());
    Logger.log(JSON.stringify(result, null, 2));
  } else {
    var authorizationUrl = service.authorize();
    Logger.log('Open the following URL and re-run the script: %s',
        authorizationUrl);
  }
} 

/**
 * Reset the authorization state, so that it can be re-tested.
 */
function reset() {
  var service = getService();
  service.reset();
}

/**
 * Configures the service.
 */
function getService() {
  return OAuth1.createService('Tumblr')
      // Set the endpoint URLs.
      .setAccessTokenUrl('https://www.tumblr.com/oauth/access_token')
      .setRequestTokenUrl('https://www.tumblr.com/oauth/request_token')
      .setAuthorizationUrl('https://www.tumblr.com/oauth/authorize')

      // Set the consumer key and secret.
      .setConsumerKey(CONSUMER_KEY)
      .setConsumerSecret(CONSUMER_SECRET)

      // Set the name of the callback function in the script referenced
      // above that should be invoked to complete the OAuth flow.
      .setCallbackFunction('authCallback')

      // Using a cache will reduce the need to read from 
      // the property store and may increase performance.
      .setCache(CacheService.getUserCache())

      // Set the property store where authorized tokens should be persisted.
      .setPropertyStore(PropertiesService.getUserProperties());
}

/**
 * Handles the OAuth callback.
 */
function authCallback(request) {
  var service = getService();
  var authorized = service.handleCallback(request);
  if (authorized) {
    return HtmlService.createHtmlOutput('Success!');
  } else {
    return HtmlService.createHtmlOutput('Denied');
  }
}

Ошибка показана ниже:

Исключение: запрос не выполнен для https://api.tumblr.com возвращенный код 400. Усеченный ответ сервера: {"meta": {"status": 400, "msg": "Bad Request"}, "response": [], "errors": [{"title": "Неверный запрос", "код": 8001, "detail": "Публикация не удалась. Пожалуйста, попробуйте еще раз."}]} (используйте опцию muteHttpExceptions для проверки полного ответа) (строка 457, файл "Сервис" )

В чем проблема в коде?

1 Ответ

1 голос
/ 21 апреля 2020

Кредиты @ TheMaster

Ошибки не включали contentType:"application/json" и JSON.stringify(payload). Они должны быть включены.

...