Ошибка аутентификации при использовании скрипта Google для поиска имен пользователей в твиттере - PullRequest
0 голосов
/ 26 июня 2019

Я использую следующий скрипт Google, чтобы следить за пользователями твиттера, и он отлично работает.

var twitterKeys= {
 TWITTER_CONSUMER_KEY: "xxx",
 TWITTER_CONSUMER_SECRET: "xxxx",
 TWITTER_ACCESS_TOKEN: "xxxx",
 TWITTER_ACCESS_SECRET: "xxxx"    
};

var props = PropertiesService.getScriptProperties();

props.setProperties(twitterKeys);

var twit = new Twitter.OAuth(props);

var service = new Twitter.OAuth(props);

if ( service.hasAccess() ) {


var url = 'https://api.twitter.com/1.1/friendships/create.json';
var payload = {
  screen_name: 'username',
};

var response = service.fetch(url, {
  method: 'post',
  payload: payload
});

var result = JSON.parse(response.getContentText());
Logger.log(JSON.stringify(result, null, 2)); 

} 

}

Теперь я хотел бы искать имена пользователей в твиттере и следил за информацией, приведенной здесь: https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-users-search

Я исправил свой код, изменив URL API, изменив полезную нагрузку и изменив метод с 'post' на 'get'.

Вот код, который у меня сейчас есть:

var twitterKeys= {
 TWITTER_CONSUMER_KEY: "xxx",
 TWITTER_CONSUMER_SECRET: "xxxx",
 TWITTER_ACCESS_TOKEN: "xxxx",
 TWITTER_ACCESS_SECRET: "xxxx"    
};

var props = PropertiesService.getScriptProperties();

props.setProperties(twitterKeys);

var twit = new Twitter.OAuth(props);

var service = new Twitter.OAuth(props);

if ( service.hasAccess() ) {
var url = 'https://api.twitter.com/1.1/users/search.json';
var payload = {
  q: 'test',
};
var response = service.fetch(url, {
  method: 'get',
  payload: payload
});
var result = JSON.parse(response.getContentText());
Logger.log(JSON.stringify(result, null, 2)); 

} 

}

Это не работает, и я получаю следующую ошибку:

Запрос не выполнен для https://api.twitter.com/1.1/users/search.json, возвращен код 401. Усеченный ответ сервера: {"errors": [{"code": 32, "message": "Не удалось аутентифицировать вас."}]} (Используйте muteHttpExceptions возможность просмотра полного ответа) (строка 450, файл «Сервис», проект «Твиттер lib»)

Я несколько раз исправлял этот код подобными способами (например, для отключения пользователей), и он работал хорошо.

Есть идеи, почему это не удается?

1 Ответ

0 голосов
/ 27 июня 2019

Существует проблема с URL-адресом, по которому производится выборка, согласно документации Twitter для GET users/search, параметр q необходимо отправить в запросе как https://api.twitter.com/1.1/users/search.json?q=searchTerm.

Отправленный вами запрос на получение не отправляет запрос в правильном формате. Вы можете обойти это, вручную установив параметр q в запросе на выборку:

var url = 'https://api.twitter.com/1.1/users/search.json'
var username = 'username'
var q = '?q=' + username

var response = service.fetch(url + q, {
  method: 'get',
  });    

var result = JSON.parse(response.getContentText());
    Logger.log(JSON.stringify(result, null, 2)); 
...