Создайте список непрочитанных сообщений входящих сообщений stackoverflow в (Google Sheets), чтобы создать бота в Telegram и получать эти уведомления.

Для получения непрочитанных входящих сообщений есть этот API:

введите здесь описание изображения

https://api.stackexchange.com/docs/inbox-unread

{
  "items": [],
  "has_more": false,
  "quota_max": 10000,
  "quota_remaining": 9998
}

Я хотел бы попросить помочь мне составить список этих входящих предупреждений в Google Таблицах. Признаюсь, через сценарий я не могу собрать его, чтобы иметь возможность выполнять эту функцию списков сообщений.

Идея состоит в том, чтобы получить этот список, а затем создать функцию с помощью скрипта для отправки этих предупреждений в мой Telegram следующим образом:

function EnviarTelegram(botSecret, chatId, body) {
var response = UrlFetchApp.fetch("https://api.telegram.org/bot" + botSecret + "/sendMessage?text=" + encodeURIComponent(body) + "&chat_id=" + chatId + "&parse_mode=HTML");
}

Таким образом, я бы получил что-то подобное в Telegram, как это уже есть для RSS-каналов:

введите здесь описание изображения

Но вместо того, чтобы получать уведомления о новых вопросах, я хочу получать входящие уведомления, когда кто-то отвечает на мой вопрос, когда я получаю баллы и так далее.


person Brondby IF    schedule 12.11.2019    source источник
comment
Вы задаете несколько разных вопросов одновременно. Пожалуйста, задавайте по одному вопросу в каждом посте. В настоящее время это выглядит так, как будто вы хотите, чтобы кто-то построил весь проект для вас. В основном это длинный список желаний, и не так уж много на пути к фактическому вопросу.   -  person Anton Dementiev    schedule 13.11.2019
comment
@AntonDementiev Я просто хочу знать, как я могу отправлять уведомления Stack в Google Sheets. И я воспользовался случаем объяснить, что я буду с ним делать, кому интересно, тоже следите за проектом.   -  person Brondby IF    schedule 13.11.2019


Ответы (1)


  • Вы хотите получить собственные непрочитанные комментарии и репутацию в Stackoverflow с помощью Stackexchange API.
  • Вы хотите поместить полученные значения в электронную таблицу.
  • Вы хотите добиться этого с помощью Google Apps Script.

Если я правильно понимаю, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Применение:

1. Получить токен доступа

Чтобы получить непрочитанные комментарии и репутацию, необходимо использовать токен доступа.

Flow:
  1. Register an application at stackapps.com.
    • Input "Application Name", "Description", "OAuth Domain" and "Application Website".
      • As a sample credential, I inputted them as "sampleApp", "This is a sample app.", "localhost" and "sample".
      • Чтобы использовать его в качестве URI перенаправления, задайте для localhost значение "Домен OAuth".
    • Скопируйте «Идентификатор клиента», «Секрет клиента» и «Ключ». «Ключ» также требуется для использования API.
  2. Authorize the scopes.
    • Please create the following URL and access it using your browser. Please set your client_id.
    • https://stackexchange.com/oauth?client_id=#####&scope=no_expiry%20read_inbox&redirect_uri=http://localhost
      • In this script, "no_expiry" and "read_inbox" are used as the scopes. These scopes are used for retrieving the unread comments.
    • Когда созданный URL откроется вашим браузером, нажмите «Подтвердить» следующим образом.
    • Скопируйте код ### code ### из URL-адреса браузера, например http://localhost/?code=### code ###.
  3. Получите токен доступа, используя «Идентификатор клиента», «Секрет клиента» и «Код». Пожалуйста, запустите следующую команду curl. Таким образом, вы можете получить токен доступа, например access_token=#####.

    • Этот токен доступа не имеет срока действия, поскольку «no_expiry» включен в области действия. Таким образом, вы можете продолжать использовать этот токен доступа.

      curl \
          -d "client_id=#####" \
          -d "client_secret=#####" \
          -d "code=#####" \
          -d "redirect_uri=http://localhost" \
          "https://stackexchange.com/oauth/access_token"
      

2. Запустить скрипт

Sample script 1:

Этот пример скрипта извлекает непрочитанные комментарии.

function myFunction() {
  var key = "###"; // Please set your key.
  var accessToken = "###"; // Please set your access token.
  var spreadsheetId = "###"; // Please set the Spreadsheet ID.

  var url = "https://api.stackexchange.com/2.2/inbox/unread?filter=withbody&pagesize=100&access_token=" + accessToken + "&key=" + key;
  var comments = JSON.parse(UrlFetchApp.fetch(url).getContentText());

  var headers = ["creation_date", "link", "title", "body"];
  var values = comments.items.map(function(item) {return headers.map(function(h) {return item[h]})});
  values.unshift(headers);
  var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName("Sheet1");
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}
Sample script 2:

Этот пример скрипта извлекает историю репутации.

function myFunction() {
  var key = "###"; // Please set your key.
  var accessToken = "###"; // Please set your access token.
  var userId = "###"; // Please set your user ID on Stackoverflow.
  var spreadsheetId = "###"; // Please set the Spreadsheet ID.

  var url = "https://api.stackexchange.com/2.2/users/" + userId + "/reputation-history/full?site=stackoverflow&pagesize=100&access_token=" + accessToken + "&key=" + key;
  var reputation = JSON.parse(UrlFetchApp.fetch(url).getContentText());

  var headers = ["creation_date", "reputation_change", "post_id"];
  var values = reputation.items.map(function(item) {return headers.map(function(h) {return item[h]})});
  values.unshift(headers);
  var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName("Sheet1");
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}
  • Когда вы используете это, вы можете получить изменение своей репутации, проверив дату и время.

Примечание:

  • Это пример скрипта. Поэтому, пожалуйста, измените это для вашей реальной ситуации.
  • К сожалению, на текущем этапе кажется, что в API нет методов для автоматического уведомления о получении нового комментария. Поэтому в качестве обходного пути для скрипта Google Apps я запускаю скрипт с помощью управляемого временем триггера. По этому я могу узнать новые комментарии. Также может быть известна смена репутации.

Использованная литература:

Если я неправильно понял ваш вопрос, и это не тот результат, который вы хотите, приношу свои извинения.

Обновлено: 19 марта 2020 г.

С января 2020 года токен доступа нельзя использовать с таким параметром запроса, как access_token=###. Ref Поэтому, пожалуйста, используйте токен доступа к заголовку запроса вместо параметра запроса. Это следующим образом.

var res = UrlFetchApp.fetch(url, {headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}});
person Tanaike    schedule 12.11.2019
comment
Большое спасибо еще раз за ваш класс учений, которые добавляют мне больше с каждым днем. Когда я научился отправлять сообщения в Telegram, я подумал, что было бы здорово обменяться небольшими знаниями о том, что я знаю. И вы прекрасно дополнили мою потребность. Я еще раз благодарю вас. Всегда очень внимателен. - person Brondby IF; 13.11.2019
comment
@Frederico Mattos Спасибо за ответ. Также я проверяю непрочитанные комментарии, используя скрипт, как указано выше. Так что я мог бы представить это. Если это было полезно для вашей ситуации, я рад. - person Tanaike; 13.11.2019
comment
Tanaike Знаете ли вы какое-нибудь видео, которое может помочь мне понять, как я могу использовать curl? Скачал программу, запустил и попытался скопировать и вставить так же, как вы выразились, заменив # на данные, но ошибок очень много. Я считаю, что нужно было сделать больше, чем просто скопировать и вставить внутрь. Заранее спасибо. - person Brondby IF; 13.11.2019
comment
@Frederico Mattos Спасибо за ответ. Я прошу прощения за неудобства. Я не уверен в образце видео. Но хотя я не уверен, что это прямое решение, например, как насчет использования команды curl в качестве одного вкладыша? Это как curl -d "client_id=#####" -d "client_secret=#####" -d "code=#####" -d "redirect_uri=http://localhost" "https://stackexchange.com/oauth/access_token" Кстати, код авторизации можно использовать только один раз. Поэтому, если при запуске команды curl возникает ошибка, повторите попытку получения кода. Таким образом, код может быть использован. Пожалуйста, будьте осторожны с этим. - person Tanaike; 13.11.2019
comment
Отлично мат... Работает на 100%! - person Brondby IF; 13.11.2019