Ajout intelligent de groupes musicaux à Google Sheets via VK API, Tampermonkey et Telegram bot

Comment organiser le stockage de musique dans Google Sheets avec la prise en charge de plusieurs programmes?


Éléments fournis: comptes dans Google, VK, télégramme.
Tâche : créer un référentiel de groupes de musique avec possibilité de réapprovisionnement pratique.
Outils : Google Apps Script (GAS), VK API, Tampermonkey, Telegram Bot API.

Créer des feuilles de calcul Google


Créez une nouvelle feuille de calcul Google.

Nous faisons un en-tête fixe (alors tous les cycles d'énumération des cellules, à cause de cela, commenceront non pas à partir de 0, mais à partir de 1).

En principe, notre modèle est prêt.

La seule chose est que je n'ai pas lié aux colonnes par les noms (je ne voulais pas utiliser de boucles), donc tout au long du script, je ferai référence au numéro de colonne câblé.

Cliquez sur "Outils - Script Editor".



2 Créez un script: Kod.gs et Bot.gs .

Code.gs
access_token = '1111111111' // VK token
ss = SpreadsheetApp.getActiveSpreadsheet() // 
sheet = ss.getSheets()[getNumSheet('')] // 
data = sheet.getDataRange().getValues() //  
numRows = sheet.getLastRow()+1 //  
faveTag = '.' //    

//   get 
function doGet(e) {
try {
    var link = e.parameters['link']
    /*
      A - 
      B - English
      C - 
      D - 
      E - 
      F - 
      G - 
    */
    var n = searchExists(link)
    if (n != false) return ContentService.createTextOutput(' '+n+'  !')
    //   API VK https://vk.com/dev/groups.getById
    var html = UrlFetchApp.fetch('https://api.vk.com/method/groups.getById.json?group_id='+link+'&fields=city,description&access_token='+access_token+'&v=5.107')
    //   json   response
    var json = JSON.parse(html).response[0]
    addInTableFromArray(json, link)
    sort()
    return ContentService.createTextOutput('')
  } catch (e) {
     return ContentService.createTextOutput('   doGet! '+e)
  }
}

//  /     
function searchGenre(txt) {
  var t = txt.match(/(?:(?:[||||]|genre|[|||]?)[\s:-]+){1}([a-z-\/-]+)/i)
  if(txt != '' && t) return t[1]
}

//     
function isRus(txt) {
  return txt.search(/[^A-Za-z0-9\/.:_]+/i)
}

// 
function sort(){
  //         
  var tableRange = "A2:G"+numRows
  var editedCell = sheet.getActiveCell()
  var range = sheet.getRange(tableRange)
  //     .    0,   1
  range.sort([{ 
    column : 4,
    ascending: true
  },{
    column: 1,
    ascending: true
  },{
    column: 2,
    ascending: true
  }])
}

//   
function searchExists(t) {
  for (var i = 1; i < data.length; i++) {
    if (t == data[i][2] || 'club'+t == data[i][2]){
      return data[i][0]+data[i][1]
    }
  }
  return false
}

//      
function addInfo(isBot = false) {
  var arr = []
  var j = 0
  var part = 1000 // - ,      . -      UrlFetchApp.fetch
  arr[j] = new Array()
  for (var i = 1; i < data.length; i++) {
    var txt = data[i][2].replace('https://vk.com/','').replace('vk.com/','').replace('^club','')
    if (txt != '' && data[i][0] == '' && data[i][1] == '' && data[i][3] == '' && data[i][4] == '' && data[i][5] == '' && data[i][6] == ''){
      arr[j].push(txt)
      if (arr[j].toString().length > part){
        j++
        arr[j] = new Array()
      }
    }
  }
  if (arr[0].length == 0){
    if (isBot) return false
    else{
      SpreadsheetApp.getUi().alert(' ,   ')
      return false
    }
  }
  //   
  for (var t = 0; t < Math.ceil(arr.toString().length/part); t++) {
    var html = UrlFetchApp.fetch('https://api.vk.com/method/groups.getById.json?group_ids='+arr[t].toString()+'&fields=city,description&access_token='+access_token+'&v=5.107')
    var json = JSON.parse(html).response
    if(json){
      for (var i = 0; i < json.length; i++) {
        var id = json[i].id
        var link = json[i].screen_name
        var name = json[i].name
        var description = (json[i].description)?json[i].description:''
        var city = (json[i].city)?json[i].city.title:''
        var rus = (isRus(name) != -1)?"A":"B"    
        //         arr
        for (var j = 1; j < data.length; j++) {
          var nameCell = data[j][2].replace('https://vk.com/','').replace('vk.com/','').replace('^club','')
          if (nameCell == link || nameCell == id){
            var num = j+1
            break
          }
        }
        sheet.getRange(rus+num).setValue(name.replace('=',''))
        sheet.getRange("C"+num).setValue('=HYPERLINK("https://vk.com/'+link+'";"'+link+'")')
        sheet.getRange("D"+num).setValue(city)
        sheet.getRange("E"+num).setValue(searchGenre(description))
        sheet.getRange("F"+num).setValue(description)
      }
    }
  }
  sort()
  return true
}

//     
function getVkFave(isBot = false) {
  var idTag
  var getTags = UrlFetchApp.fetch('https://api.vk.com/method/fave.getTags.json?access_token='+access_token+'&v=5.107')
  var res = JSON.parse(getTags).response
  var iTag = res.items
  for (var i = 0; i < iTag.length; i++) {
    if (iTag[i].name == faveTag) idTag = iTag[i].id
  }
  
  // 
  if (!isBot){
    var ui = SpreadsheetApp.getUi()
    var resp = ui.alert('     "'+faveTag+'"     . ?', ui.ButtonSet.YES_NO)
  }
  var inside = function (){
    var getPages = UrlFetchApp.fetch('https://api.vk.com/method/fave.getPages.json?tag_id='+idTag+'&fields=city,description&access_token='+access_token+'&v=5.107')
    var iPage = JSON.parse(getPages).response.items
    //    .   ,   
    for (var j = 0; j < iPage.length; j++) {
      var gr = iPage[j].group
      addInTableFromArray(gr)
      numRows++
        UrlFetchApp.fetch('https://api.vk.com/method/fave.removePage?group_id='+gr.id+'&access_token='+access_token+'&v=5.107')
        Utilities.sleep(1000) // 
    }
    sort()
  }
  if (isBot) { // ,      ui
    inside()
  }else if(resp == ui.Button.YES) {
    inside()
  }
}

//    
function addInTableFromArray(arr, linkIn) {
  if (linkIn){
    var link = linkIn
  }else{
    var link = arr.screen_name
    if (searchExists(link) != false) return false
  }
  var name = arr.name // 
  var description = (arr.description)?arr.description:'' //
  var city = (arr.city)?arr.city.title:'' // 
  //      ,      "English"
  var rus = (isRus(name) != -1)?"A":"B"
  //    
  sheet.getRange(rus+numRows).setValue(name.replace('=',''))
  sheet.getRange("C"+numRows).setValue('=HYPERLINK("https://vk.com/'+link+'";"'+link+'")')
  sheet.getRange("D"+numRows).setValue(city)
  sheet.getRange("E"+numRows).setValue(searchGenre(description))
  sheet.getRange("F"+numRows).setValue(description)
}
//  . .
function checkActualLink(){
  for (var i = 1; i < data.length; i++) {
    try {
      var num = i+1
      UrlFetchApp.fetch("https://vk.com/"+data[i][2])
      sheet.getRange('C'+num).setBackgroundColor('')
    }catch(err) {
      var num = i+1
      sheet.getRange('C'+num).setBackgroundColor('red')
    }
  }
}
//  URL  .     
function getStatusUrl(url){
   var options = {
     'muteHttpExceptions': true,
     'followRedirects': false
   }
   var response = UrlFetchApp.fetch(url.trim(), options)
   return response.getResponseCode()
}
//    
function getNumSheet(nameList){
  var s = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(nameList)
  if (s != null) {
    return s.getIndex()-1
  }else{
    return false
  }
}
// 
function escapeHtml(text) {
  return text
      .replace(/&/g, "")
      .replace(/</g, "")
      .replace(/>/g, "");
}
// 
function onOpen() {
  SpreadsheetApp.getUi()
  .createMenu(' ')
  .addItem('', 'sort')
  .addItem('   ', 'getVkFave')
  .addItem(' ', 'addInfo')
  .addToUi();
}

//   
function ll(t){
  return Logger.log(t)
}


Bot.gs
var botApi = 'https://api.telegram.org/bot1123123:AAA/' //  Telegram  
/* :
 /start -   
 /sort - 
 /getvkfave -     
 /addinfo -  
 /getall -   
*/
function doPost(e){
  var inp = JSON.parse(e.postData.contents)
  // 
  var sheet2 = ss.getSheets()[getNumSheet('')]
  sheet2.getRange('A1').setValue(inp)
  
  var inpTxt = inp.message.text
  var chatId = inp.message.chat.id
  
  var link = inpTxt.replace('https://vk.com/','').replace('vk.com/','').replace('^club','')
  //  
  // start
  if (inpTxt == '/start' || inpTxt == ' '){
    sendText(chatId, '      Google .\n'+
                    '/start -   \n'+
                    '/sort - \n'+
                    '/getvkfave -    \n'+
                    '/addinfo -  \n'+
                    '/getall -   ')
    return true
  }
  // sort
  if (inpTxt == '/sort' || inpTxt == ''){
    sort()
    sendText(chatId, '')
    return true
  }
  // getvkfave
  if (inpTxt == '/getvkfave' || inpTxt == '   '){
    getVkFave(true)
    sendText(chatId, '')
    return true
  }
  // addinfo
  if (inpTxt == '/addinfo' || inpTxt == ' '){
    if (addInfo(true)) sendText(chatId, '')
    else sendText(chatId, ' ,   ')
    return true
  }
  // getall
  if (inpTxt == '/getall' || inpTxt == '  '){
    var arr = [[],[],[],[],[],[],[],[],[],[],[' ']] // TODO 
    var repeat = ''
    var n = 0
    var j = 0
    for (var i = 1; i < data.length; i++) {
      if (j == 4){ //    
        n++
        j = 0
      }
      if (repeat != data[i][3]){
        arr[n][j] = data[i][3]
        if (data[i][3] == '') arr[n][j] = '---'
        j++
      }
      repeat = data[i][3]
    }
    var key = JSON.stringify({keyboard: 
                              arr,
                              resize_keyboard:true,
                              one_time_keyboard:true
                            });
    sendText(chatId, ' ', key)
    return true
  }
  
  // 
  if (isRus(link) != -1) {
    var name = (inpTxt == '---')?' ':inpTxt
    for (var j = 1; j < data.length; j++) {
      if (data[j][3] == inpTxt || inpTxt == '---') {
        var str = ' '+name+'\n\n'
        for (var i = 1; i < data.length; i++) {
          if ((data[j][3] == data[i][3]) || (data[i][3] == '' && inpTxt == '---')) {
            if (str.length >= 4000) { //   -    Telegram 
              sendText(chatId, str)
              str = ''
            }
            str = str + '<a href="https://vk.com/' + data[i][2] + '">' + escapeHtml(data[i][0] + data[i][1]) + '</a> \n'
          }
        }
        if (str != '') sendText(chatId, str)
        return true
      }
    }
    sendText(chatId, inpTxt + ' -   .    ')
    return true
  }
  //   
  if (getStatusUrl('https://vk.com/'+link) != 200 && getStatusUrl('https://vk.com/club'+link) != 200){
    sendText(chatId, inpTxt+' -  ')
    return true
  }
  
  var name = searchExists(link)
  if (name != false){
    sendText(chatId, ' '+name+'  ')
    return true
  }else{
    var html = UrlFetchApp.fetch('https://api.vk.com/method/groups.getById.json?group_id='+link+'&fields=city,description&access_token='+access_token+'&v=5.103')
    var json = JSON.parse(html).response[0]
    addInTableFromArray(json, link)
    sort()
    sendText(chatId, ' '+json.name+' ')
    return true
  }
}
//  
function sendText(chatId, text, key = ''){
  var payload = {
    'method': 'sendMessage',
    'chat_id': String(chatId),
    'text': text,
    'parse_mode': 'HTML',
    'reply_markup': key,
    'disable_web_page_preview': true,
    'one_time_keyboard':true
  }     
  var data = {
    "method": "post",
    "payload": payload
  }
  //    UrlFetchApp.fetch   ll(text)
  UrlFetchApp.fetch(botApi, data)
}


Plus de détails ci-dessous.

Cliquez sur " Publier - Déployer en tant qu'application Web ".



Nous avons maintenant un lien du formulaire script.google.com/macros/s/AAA/exec , en lui substituant le paramètre "link", nous pouvons ajouter le groupe VK à Google Table.

Scripts utilisateur dans le navigateur


La première et principale façon de saisir des données!

Ouvrez le navigateur Google Chrome ou Mozilla Firefox et installez le plug-in de script utilisateur Tampermonkey.

Liens pour Chrome , pour Mozilla .

À l'origine utilisé Greasemonkey, mais a dû passer à Tampermonkey en raison de la compatibilité entre les navigateurs.

Qui se demandera pourquoi les paramètres du script utilisateur commencent par le préfixe GM_ , et non TM_ - l'idée n'est pas la mienne, consultez la documentation .


Nous insérons le script vkGroupToGS en cliquant sur le premier onglet avec un signe plus.

vkGroupToGS
// ==UserScript==
// @name         vkGroupToGS
// @namespace    https://vk.com/*
// @version      0.1
// @author       You
// @match        https://vk.com/*
// @grant        GM_xmlhttpRequest
// ==/UserScript==
    var url_first = 'https://script.google.com/macros/s/AAA/exec'
    var url_short = document.location.href.replace("https://vk.com/", "")
    var d = document.createElement('div')
    var head = document.querySelector('.left_menu_nav_wrap')
    d.setAttribute('id', 'send_group')
    d.style.display = 'inline-block'
    d.style.position = 'relative'
    d.style.fontSize = '50pt'
    d.style.cursor = 'pointer'
    d.innerHTML = '+'
    head.parentNode.appendChild(d)
    d.onclick = function() {
    setTimeout(function() {
        GM_xmlhttpRequest({
            method: 'GET',
            url: url_first + '?link=' + url_short,
            headers: {
                'Accept': 'application/atom+xml,application/xml,text/xml'
            },
            onload: function(x) {
                console.log(x.responseText)
                if (//.test(x.responseText)) document.querySelector('#send_group').style.color = 'red'
                else document.querySelector('#send_group').style.color = 'green'
            }
        })
    }, 0)
};


"Fichier - Enregistrer".


Comme vous pouvez le voir, notre script dessine un signe plus (ce qui était suffisant pour l'imagination) dans le bloc gauche left_menu_nav_wrap .


En cliquant sur le signe plus, GM_xmlhttpRequest de vkGroupToGS est exécuté dans notre script Code.gs en utilisant le lien Google Sheets ci-dessus (url_first).

Tampermonkey nous demandera d'associer ces 2 scripts à des droits, cliquez sur " Toujours autoriser " ou " Toujours autoriser le domaine " pour " script.google.com ". Répétez au besoin pour " script.googleusercontent.com ".


Dès que la demande s'envole avec succès, le rappel de GM_xmlhttpRequest viendra colorer notre bouton en vert lors de l'ajout réussi ou en rouge si l'erreur revient.

De plus Tampermonkey - stockage dans le cloud de scripts dans Google (pas auparavant) en présence de leur fertilité et de leur imagination.

Retour à Google Sheets.

Avant de commencer à analyser notre Code.gs, je souhaite partager la documentation pour le développement dans VK - vk.com/dev

Jeton VK


Obtention d'une clé d'accès.
Faire des demandes à l'API VKontakte.

Jusqu'à présent, je n'ai appris qu'une seule façon d'obtenir un jeton - grâce à des applications auto-écrites.

Nous venons ici .
Plate-forme - " Application autonome ".
Après la création, tout ce dont nous avons besoin est un ID d'application (maintenant à sept chiffres), que ce soit 1234567.
Mais nous avons besoin d'un jeton.
Très bien sur le jeton est écrit dans Meet the VK API .

Si nous ne voulons pas lire, ouvrez simplement le lien en insérant votre ID d'application dans client_id . Nous sommes redirigés vers une page avec l'inscription:


Veuillez ne pas copier les données de la barre d'adresse pour les sites tiers. Ainsi, vous risquez de perdre l'accès à votre compte.

Et c'est vrai, soyez très prudent avec le jeton!

Nous copions le jeton de la barre d'adresse après access_token .

Je partagerai immédiatement qu'avec ce jeton, vous pouvez interroger comme vk.com/dev/groups.search?params%5Bq%5D=%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0¶ms % 5Btype% 5D = page & params% 5Bcountry_id% 5D = 1 & params% 5Bcity_id% 5D = 1 & params% 5Bmarket% 5D = 0 & params% 5Boffset% 5D = 0 & params% 5Bcount% 5D = 5 & params% 5Bcount% 5D = 5 & params% 5D

peut être converti en toute sécurité en liens api.vk.com/method/groups.search?q=%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0&type=page&country_id=1&city_id=1&future= 0 & market = 0 & offset = 0 & count = 10 & access_token = 1111111111111 & v = 5.107 et recevez des informations dans n'importe quelle application.



J'ai ouvert une petite boîte de Pandore, ce n'est peut-être pas une nouveauté, mais de cette façon, vous pouvez obtenir beaucoup de choses utiles de VK, automatiser de nombreux processus et créer beaucoup de choses pratiques.

Bien sûr, avec certaines limitations , disons pas plus de 999 entités dans la réponse ou 20 requêtes par seconde, etc.

De plus, quelqu'un sera intéressé à jouer avec les fichiers stockés - dans notre application, l'onglet " Procédures stockées ".

Il a ses propres règles pour extraire des informations, ce qui est très pratique pour les requêtes séquentielles, afin de ne pas faire beaucoup de boucles dans votre code.

Suivez les versions!

Avec leurs modifications, la fonctionnalité des méthodes peut changer. Maintenant , j'applique des exemples pour la version 5.107 .

Donc, nous avons le jeton, allez à ...

Code.gs

doGet (e) - Nous acceptons les requêtes get entrantes du bot, VK et seulement du navigateur.
Les paramètres d'entrée sont analysés comme e.parameters ['INPUT_Parameter']
Un lien arrive, vérifiez s'il y a une table. Sinon, demandez des informations détaillées via groups.getById , parsim, add.

! Attention! Le script est simple, il avalera donc tous les liens entrants, donc soyez prudent même en saisissant 123 lors de la vérification du script.

searchGenre est une recherche intelligente du style / genre du groupe, à cause de laquelle j'ai mis le libellé «expressions régulières» dans l'article.

Des améliorations sont possibles.

Bien que cela ne fonctionne que pour rechercher la chaîne de mots suivante à travers une barre oblique ou un tiret après les mots "le style ou le genre ou le genre . »

isRus est une règle simple régulière à l'exception des lettres russes.
genre - tri je mis la valeur par défaut à 1. ville, 2. nom..
searchExists - recherche pour les groupes existants à travers une boucle.
ADDINFO - fait un script pour moi - même, laissé ici , en bonus. Il est nécessaire si vous avez une liste de liens, mais qu'il n'y a pas de données dessus.

Insérez la liste dans la colonne "Lien", cliquez sur " Remplir vide " dans le menu principal et les colonnes restantes sont reconstituées à partir de VK.

En raison de restrictions sur le nombre de caractères dans UrlFetchApp .fetch et le nombre de liens placés dans la barre d'adresse a dû faire un cycle de 1000 caractères.

getVkFave- Un autre bonus qui s'est produit dans ma tête lors de la rédaction d'un article et que j'ai moi-même commencé à utiliser.

L'essentiel est que nous entrions dans l'application VC à partir du téléphone, tombons sur le groupe que nous voulons enregistrer, enregistrez-le dans des signets avec l'étiquette « groupe de musique » ajoutée à l'avance (variable globale faveTag ).

Comment s'accumulent-ils, accédez à notre tableau Google, appelez le menu, cliquez sur " Récupérer les signets de VK ".

Le script avec le jeton rampe dans api.vk.com/method/fave.getTags , analyse, ajoute à la table, ayant précédemment averti de la suppression du VC (ici, plus précisément avec les tests, tout est supprimé complètement des signets avec cette balise ).

getStatusUrl et checkActualLink- une expérience qui a abouti à 2 scripts.
L'essentiel est de vérifier la validité et l'accès aux liens.

Parce qu'au fil des années d'accumulation de groupes musicaux, j'ai été confronté au fait que les enregistrements publics sont supprimés ou renommés.

Qui utilisera ma convenance, je conseille à TODO , qui supprimera non seulement les liens invalides, mais vérifiera également la présence dans VK via groups.search par nom.

checkActualLink - vérifie une fois la validité en colorant invalide en rouge.

  • Moins - basse vitesse.
  • De plus, vous pouvez le faire quand vous le souhaitez.

getStatusUrl - appelé dans la cellule via un script

=getStatusUrl(CONCAT("https://vk.com/";C2))

Il a pris la base d'ici .

  • Moins - s'exécute pour toutes les cellules à chaque ouverture de la page.
  • — , , checkActualLink.

Viennent ensuite la commodité des scripts Google:

addInTableFromArray - Ajouter une ligne à la table. Soit à partir du cycle ou d'une seule fois.
getNumSheet - Recherchez le numéro de feuille par nom. Honnêtement, je n'ai pas trouvé de moyen plus simple sur Internet que celui-ci. Il est nécessaire en raison du décalage des numéros de feuille lors de l'ajout de nouveaux. Il a pris la base d'ici .
escapeHtml - Supprimer les caractères spéciaux
ll - fait Logger.log court pour lui - même , réduit le temps, je conseille.
onOpen - Une fonctionnalité familière pour dessiner des menus dans Google Sheets.

Ainsi, notre Code.gs attrape des liens de VK à Tampermonkey et ajoute des groupes à Google Table.

Allumez la paresse


  • Nous sommes assis devant l'ordinateur.
  • Nous sommes assis au téléphone.

Depuis un ordinateur, nous avons appris à ajouter des groupes via le " signe plus " dans VK et via des signets.
Via le téléphone, uniquement via les signets de l'application VK.

Examinons deux autres options pour créer des groupes.

USI


Scripts utilisateur dans un navigateur mobile.

Pour certains, cela semblera démodé et inutile, mais il y aura ces gens qui en retireront les avantages.

Jusqu'à présent, la recherche sur Internet n'a trouvé qu'un tel plugin .
Il ne fonctionne que dans Firefox (testé uniquement sous Android).

Un énorme avantage - vous pouvez utiliser le script Tampermonkey.

En raison des différences de disposition entre vk.com et m.vk.com , et également en raison de l'ouverture de la fenêtre par défaut dans m.vk.com, je n'ai pas dessiné de signe plus , mais j'ai créé un script simple VK_event_to_list_mvk qui fonctionne lorsque la fenêtre s'ouvre (me brûler en enfer pour setTimeout , je sais).

Code.gs
// ==UserScript==
// @name         VK_event_to_list_mvk
// @namespace    https://m.vk.com/*
// @match        https://m.vk.com/*
// @grant    GM_xmlhttpRequest
// ==/UserScript==
setTimeout(function() {
    var url_first = 'https://script.google.com/macros/s/111/exec';
    var url_short = document.location.href.replace("https://m.vk.com/", "");
    GM_xmlhttpRequest({
        method: 'GET',
        url: url_first + '?link=' + url_short,
        headers: {
            'Accept': 'application/atom+xml,application/xml,text/xml'
        },
        onload: function(x) {
            alert(x.responseText);
        }
    });
}, 2000);



Telegram Bot


Nous créons un bot selon les instructions .
Nous avons besoin d'un jeton, que ce soit 123123.

Créez un script Bot.gs , insérez notre 123123 dans la variable botApi , encadrez- le avec des guillemets et le lien api.telegram.org .

Ensuite, nous devons associer notre bot à Google Sheets. Vous pouvez voir comment procéder via WebHook dans l' article précédent .

Que fera notre bot?

On décompose par les commandes:

  • / start - Démarre le bot
  • / sort - Trier
  • / getvkfave - Récupère les signets de VK
  • / addinfo - Remplissez vide
  • / getall - Récupère tous les groupes

Nous voyons que nous avons le début du bot, là nous allons insérer juste un tutoriel avec une partie descriptive à votre discrétion.

Trois commandes du menu principal au cas où.

Et le prochain bonus est / getall , à ce sujet ci-dessous.

Des commandes pour un appel pratique (écrivez une barre oblique dans la ligne d'entrée du message) peuvent être ajoutées au même @BotFather via / setcommands.

Format - lignes à travers un tiret:

start -   
sort - 
getvkfave -    
addinfo -  
getall -   


Bot.gs

doPost - accepte les messages entrants du bot.

Naturellement, en tant que programmeur curieux, j'ai immédiatement commencé à utiliser les journaux. Il existe peut-être des moyens plus simples, mais je viens de créer une nouvelle feuille, appelée «Journaux» et j'attrape les demandes entrantes dans la première cellule.

Par conséquent, après avoir analysé le message entrant via JSON.parse (e.postData.contents) , nous écrivons immédiatement dans les journaux.

Ensuite, nous déterminons laquelle des équipes est venue nous voir.

S'il ne s'agit pas d'une équipe, nous vérifions la validité, c'est-à-dire s'il existe un groupe dans VK.

sendText - envoie des messages au bot (parse_mode = HTML par défaut), documentation .

/ getall - nous l' analyserons séparément.

N'ayez pas peur de ma décision de

[[],[],[],[],[],[],[],[],[],[],[' ']]

Conçu pour remplir les lignes avec les villes, alors que nous nous limitons à 8-10 lignes dans 4 villes (variable j = 4).

Si le groupe de musique est sans ville, insérez ---.

Il suffit de choisir la ville et attraper les lettres russes à Bot.gs .

Nous affichons une liste de liens, rien de plus.


N'oubliez pas que l'accès à la documentation et au test du bot via la barre d'adresse via le proxy VPN gratuit Hotspot Shield est un VPN illimité (pour Google Chrome).

Nous avons donc appris trois façons d'entrer dans notre table:

  • Scripts utilisateur dans le navigateur
  • Scripts utilisateur dans un navigateur mobile (USI)
  • Telegram Bot

Ce que vous devez savoir et retenir?


Le préfixe de club dans les liens VK Les

groupes VK ont 2 types de stockage d'identifiant.

  1. Le nom est en anglais avec des traits de soulignement et des tirets valides.
  2. Identifiant

Et ils peuvent donner le meilleur et ainsi de suite.

La vérification est simple.

S'il y a un groupe, disons vk.com/4soulsband , remplacez 4soulsband par group_ids dans vk.com/dev/groups.getById , une liste de paramètres s'affiche, dont l'un est un ID . Et si on met le club devant lui , le tour est joué, on arrive à la même page vk.com/club68130764 .

Limiter le stockage des groupes en VK à 5000

Cela semble ridicule, mais je n'en avais pas assez.

Ma peine avec la mise à jour de la page VK,

je l'avoue jusqu'à ce que je puisse vaincre la capture de la transition entre les pages en VK pour réinitialiser le signe plus à Tampermonkey. TODO

Utilisation de Google Sheets comme base de données

  • Plus - disponibilité
  • Moins - lorsque plus de 5000 lignes sont accumulées, le travail avec la " DB " ralentit . Donc, pour les projets sérieux, il est préférable d'utiliser un SGBD normal.

Définition d'une ville de groupe L'

adresse de groupe dans VK peut être ici vk.com/dev/groups.getAddresses , respectivement, qui souhaite améliorer la recherche d'une ville pour un groupe peut l'utiliser.

Total


On a:

  1. Tableau de collecte de données Google avec lequel nous avons appris à travailler.
  2. Connaissance de l'API VK. Autrement dit, vous savez déjà que nous ne pouvons pas être limités aux groupes musicaux.
  3. Telegram Bot avec une base de données qui n'a pas besoin d'être déployée et configurée.

Mon objectif n'est pas de me vanter du prochain jouet créé, mon objectif est de montrer aux nouveaux arrivants (et pas seulement) une énorme couche d'API ouvertes qui peuvent aider à rendre la vie à un degré ou à un autre, passer de la terre de fer aux «nuages», pour ainsi dire.

Cette fonctionnalité est prête, comme elle est ouverte à des améliorations.

Bonne chance dans le développement et la compréhension de nouvelles connaissances.

Documentation


Script Google Apps - Service de feuille de calcul
API Telegram Bot API
VK
Apprenez à écrire des scripts
utilisateur. Approfondir la
surveillance du site à l'aide de Google Docs
Pampering. Nous écrivons le bot Telegram sur le script Google
[Exemples, Script Google Apps] Développement de modules complémentaires / scripts pour Google Sheets (feuilles de calcul)
Comment utiliser les feuilles de calcul Google pour vérifier les liens cassés

All Articles