Intelligentes Hinzufügen von Musikgruppen zu Google Sheets über VK API, Tampermonkey und Telegram Bot

Wie organisiere ich Musikspeicher in Google Sheets mit Unterstützung mehrerer Programme?


Gegeben : Konten in Google, VK, Telegramm.
Aufgabe : Erstellen Sie ein Repository mit Musikgruppen mit der Möglichkeit einer bequemen Auffüllung.
Tools : Google Apps-Skript (GAS), VK-API, Tampermonkey, Telegramm-Bot-API.

Erstellen Sie Google Sheets


Erstellen Sie ein neues Google Sheets.

Wir machen einen festen Header (dann beginnen alle Zyklen der Aufzählung von Zellen aus diesem Grund nicht bei 0, sondern bei 1).

Grundsätzlich ist unsere Vorlage fertig.

Das einzige ist, dass ich mich nicht über die Namen an die Spalten gebunden habe (ich wollte keine Schleifen verwenden), daher werde ich im gesamten Skript auf die fest verdrahtete Spaltennummer verweisen.

Klicken Sie auf "Extras - Skripteditor".



2 Erstellen Sie ein Skript: Kod.gs und 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)
}


Weitere Details unten.

Klicken Sie auf " Veröffentlichen - Als Webanwendung bereitstellen ".



Jetzt haben wir einen Link des Formulars script.google.com/macros/s/AAA/exec , der den Parameter "link" ersetzt. Wir können die VK-Gruppe zu Google Table hinzufügen.

Benutzerskripte im Browser


Die erste und wichtigste Art der Dateneingabe!

Öffnen Sie den Google Chrome-Browser oder Mozilla Firefox und installieren Sie das Tampermonkey-Benutzerskript-Plugin.

Links für Chrome , für Mozilla .

Ursprünglich verwendete Greasemonkey, musste aber aufgrund der browserübergreifenden Kompatibilität zu Tampermonkey wechseln .

Wer Fragen hat, warum die Benutzerskriptparameter mit dem Präfix GM_ und nicht mit TM_ beginnen - die Idee ist nicht meine, gehen Sie zur Dokumentation .


Wir fügen das vkGroupToGS- Skript ein, indem wir auf die erste Registerkarte mit einem Pluszeichen klicken.

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)
};


"Datei - Speichern."


Wie Sie sehen können, zeichnet unser Skript im linken Block left_menu_nav_wrap ein Pluszeichen (was für die Vorstellungskraft ausreichend war) .


Durch Klicken auf das Pluszeichen wird GM_xmlhttpRequest von vkGroupToGS in unserem Skript Code.gs unter Verwendung des oben angehängten Google Sheets-Links (url_first) ausgeführt.

Tampermonkey fordert uns auf, diese beiden Skripte mit Rechten zu verknüpfen. Klicken Sie für " script.google.com " entweder auf " Immer zulassen " oder auf " Immer Domain zulassen ". Wiederholen Sie diesen Vorgang nach Bedarf für " script.googleusercontent.com ".


Sobald die Anfrage erfolgreich wegfliegt, kommt der Rückruf von GM_xmlhttpRequest und färbt unsere Schaltfläche grün ( nach erfolgreicher Hinzufügung) oder rot ( wenn der Fehler erneut auftritt) .

Plus Tampermonkey - Cloud-basierte Speicherung von Skripten in Google (bisher nicht) in Gegenwart ihrer Fruchtbarkeit und ihrer Vorstellungskraft.

Zurück zu Google Sheets.

Bevor ich mit dem Parsen unserer Code.gs beginne, möchte ich die Dokumentation für die Entwicklung in VK - vk.com/dev freigeben

VK-Token


Erhalten eines Zugriffsschlüssels.
Anforderungen an die VKontakte-API stellen.

Bisher habe ich nur einen Weg kennengelernt, um ein Token zu erhalten - durch selbst geschriebene Anwendungen.

Wir kommen hierher .
Plattform - " Standalone-Anwendung ".
Nach dem Erstellen benötigen wir lediglich eine Anwendungs-ID (jetzt siebenstellig), die 1234567 lautet.
Wir benötigen jedoch ein Token.
Sehr gut über das Token ist in Meet the VK API geschrieben .

Wenn wir nicht lesen möchten, öffnen Sie einfach den Link, indem Sie Ihre Anwendungs-ID in client_id einfügen . Wir werden auf eine Seite mit der Aufschrift weitergeleitet:


Bitte kopieren Sie die Daten nicht aus der Adressleiste für Websites von Drittanbietern. Dadurch verlieren Sie möglicherweise den Zugriff auf Ihr Konto.

Und das ist richtig, sei sehr vorsichtig mit dem Token!

Wir kopieren das Token nach access_token aus der Adressleiste .

Ich werde sofort mitteilen, dass Sie mit diesem Token wie vk.com/dev/groups.search?params%5Bq%5D=%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0¶ms abfragen können % 5Btype% 5D = Seite & Parameter% 5Bcountry_id% 5D = 1 & Parameter% 5Bcity_id% 5D = 1 & Parameter% 5Bmarket% 5D = 0 & Parameter% 5Boffset% 5D = 0 & Parameter% 5Bcount% 5D = 5 & Parameter% 5Bcount% 5D = 5 & Anzahl%

kann sicher in Links konvertiert werden 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 und erhalten Informationen in jeder Anwendung.



Ich habe eine kleine Büchse von Pandora geöffnet, vielleicht ist dies keine Neuigkeit, aber auf diese Weise können Sie viele nützliche Dinge von VK erhalten, viele Prozesse automatisieren und viele praktische Dinge machen. Nehmen wir

mit bestimmten Einschränkungen an , dass in der Antwort nicht mehr als 999 Entitäten oder 20 Anfragen pro Sekunde usw. enthalten sind.

Außerdem wird jemand daran interessiert sein, mit den gespeicherten Dateien zu spielen - in unserer Anwendung die Registerkarte " Gespeicherte Prozeduren ".

Es hat seine eigenen Regeln zum Abrufen von Informationen, was für sequentielle Abfragen sehr praktisch ist, um nicht viele Schleifen in Ihrem Code zu erstellen.

Folgen Sie den Versionen!

Mit ihren Änderungen kann sich die Funktionalität der Methoden ändern. Jetzt wende ich Beispiele für Version 5.107 an .

Also, wir haben das Token, gehen Sie zu ...

Code.gs

doGet (e) - Wir akzeptieren eingehende Get-Anfragen vom Bot, VK und nur vom Browser.
Die Eingabeparameter werden wie e.parameters ['INPUT_Parameter'] analysiert.
Ein Link kommt an. Überprüfen Sie, ob eine Tabelle vorhanden ist. Wenn nicht, fordern Sie detaillierte Informationen über groups.getById , parsim, add an.

! Beachtung! Das Skript ist einfach, sodass alle eingehenden Links verschluckt werden. Geben Sie daher beim Überprüfen des Skripts auch 123 ein.

searchGenre - eine intelligente Suche nach dem Stil / Genre der Gruppe, weshalb ich das Label "reguläre Ausdrücke" in den Artikel eingefügt habe.

Verbesserungen sind möglich.

Während es nur funktioniert, um nach der nachfolgenden Wortfolge durch einen Schrägstrich oder Bindestrich nach den Wörtern zu suchenStil oder Genre oder Genre ".

isRus ist eine einfache reguläre Regel ohne russische Buchstaben.
Sortieren - Sortieren. Ich habe die Standardeinstellung auf 1. Stadt, 2. Name.
searchExists gesetzt - einfache Suche nach vorhandenen Gruppen durch eine Schleife.
addInfo - hat ein Skript für mich erstellt und hier gelassen Als Bonus. Es ist erforderlich, wenn Sie eine Liste von Links haben, aber keine Daten dazu haben.

Fügen Sie die Liste in die Spalte "Link" ein, klicken Sie im Hauptmenü auf " Nachfüllen leer ", und die verbleibenden Spalten werden aus VK wieder aufgefüllt.

Aufgrund von Einschränkungen bei der Anzahl der Zeichen in UrlFetchApp .fetch und die Anzahl der Links in der Adressleiste mussten einen Zyklus von 1000 Zeichen machen.

getVkFave- Ein weiterer Bonus, der in meinem Kopf beim Schreiben eines Artikels auftrat und den ich selbst zu nutzen begann.

Unter dem Strich gehen wir vom Telefon aus in die VC-Anwendung, stoßen auf die Gruppe, die wir speichern möchten, und speichern sie in Lesezeichen, wobei das Label „ Musikgruppeim Voraus hinzugefügt wurde (globale Variable faveTag ).

Wenn sie sich ansammeln, gehen Sie zu unserer Google-Tabelle, rufen Sie das Menü auf und klicken Sie auf " Lesezeichen von VK abrufen ".

Das Skript mit dem Token wird in api.vk.com/method/fave.getTags gecrawlt , analysiert und zur Tabelle hinzugefügt , nachdem zuvor vor dem Entfernen aus dem VC gewarnt wurde (genauer gesagt, beim Testen wird alles vollständig aus Lesezeichen mit diesem Tag gelöscht ).

getStatusUrl und checkActualLink- Ein Experiment, das zu 2 Skripten führte.
Unter dem Strich wird die Gültigkeit und der Zugriff auf Links überprüft.

Weil ich im Laufe der Jahre der Ansammlung von Musikgruppen mit der Tatsache konfrontiert war, dass öffentliche Aufzeichnungen gelöscht oder umbenannt wurden.

Wer meine Bequemlichkeit nutzt, rät ich einigen TODO , die nicht nur ungültige Links löschen, sondern auch die Präsenz in VK über groups.search nach Namen überprüfen .

checkActualLink - überprüft einmalig die Gültigkeit, indem es ungültig in Rot färbt.

  • Minus - niedrige Geschwindigkeit.
  • Plus - Sie können es tun, wann Sie wollen.

getStatusUrl - wird in der Zelle über ein Skript aufgerufen

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

Er nahm die Basis von hier .

  • Minus - wird bei jedem Öffnen der Seite für alle Zellen ausgeführt.
  • — , , checkActualLink.

Als nächstes kommt die Bequemlichkeit für Google-Skripte:

addInTableFromArray - Fügen Sie der Tabelle eine Zeile hinzu. Entweder aus dem Zyklus oder einmalig.
getNumSheet - Suche nach Blattnummer nach Namen. Ehrlich gesagt habe ich im Internet keinen einfacheren Weg gefunden als diesen. Dies ist aufgrund der Verschiebung der Blattnummern beim Hinzufügen neuer erforderlich. Er nahm die Basis von hier .
EscapeHtml - Löschen Sie Sonderzeichen
ll - machte Logger.log für sich selbst kurz , reduziert die Zeit, rate ich.
onOpen - Eine bekannte Funktion zum Zeichnen von Menüs in Google Sheets.

Unser Code.gs fängt also Links von VK über Tampermonkey ab und fügt Gruppen zu Google Table hinzu.

Faulheit einschalten


  • Wir sitzen am Computer.
  • Wir sitzen am Telefon.

Von einem Computer aus haben wir gelernt, wie man Gruppen durch das " Pluszeichen " in VK und durch Lesezeichen hinzufügt .
Über das Telefon, nur über Lesezeichen in der VK-Anwendung.

Schauen wir uns zwei weitere Optionen zum Erstellen von Gruppen an.

USI


Benutzerskripte in einem mobilen Browser.

Für manche wird es altmodisch und unnötig erscheinen, aber es wird Leute geben, die die Profis herausholen.

Beim Durchsuchen des Internets wurde bisher nur ein solches Plugin gefunden .
Es funktioniert nur in Firefox (nur in Android getestet).

Ein großes Plus - Sie können das Tampermonkey-Skript verwenden.

Aufgrund der unterschiedlichen Layouts zwischen vk.com und m.vk.com sowie des Öffnens des Standardfensters in m.vk.com habe ich kein Pluszeichen gezeichnet , sondern ein einfaches Skript VK_event_to_list_mvk erstellt , das beim Öffnen des Fensters funktioniert (brenne mich) in der Hölle für setTimeout , ich weiß).

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);



Telegramm Bot


Wir erstellen einen Bot gemäß den Anweisungen .
Wir brauchen ein Token, sei es 123123.

Erstellen Sie ein Bot.gs- Skript , fügen Sie unser 123123 in die botApi- Variable ein und rahmen Sie es mit Anführungszeichen und dem Link api.telegram.org ein .

Als nächstes müssen wir unseren Bot mit Google Sheets verknüpfen. Wie das geht, erfahren Sie im vorherigen Artikel über WebHook .

Was wird unser Bot tun?

Wir zerlegen durch die Befehle:

  • / start - Startet den Bot
  • / sort - Sortieren
  • / getvkfave - Lesezeichen von VK abrufen
  • / addinfo - Leer ausfüllen
  • / getall - Holen Sie sich alle Gruppen

Wir sehen, dass wir den Anfang des Bots haben. Dort fügen wir nach Ihrem Ermessen nur ein Tutorial mit einem beschreibenden Teil ein.

Drei Befehle aus dem Hauptmenü für alle Fälle.

Und der nächste Bonus ist / getall , darüber unten.

Befehle zum bequemen Aufrufen (Schreiben eines Schrägstrichs in die Nachrichteneingabezeile) können über / setcommands zum gleichen @ BotFather hinzugefügt werden.

Format - Linien durch einen Bindestrich:

start -   
sort - 
getvkfave -    
addinfo -  
getall -   


Bot.gs

doPost - akzeptiert eingehende Nachrichten vom Bot.

Als neugieriger Programmierer habe ich natürlich sofort angefangen, Protokolle zu verwenden. Vielleicht gibt es einfachere Möglichkeiten, aber ich habe gerade ein neues Blatt mit dem Namen "Protokolle" erstellt und fange eingehende Anfragen in der ersten Zelle ab.

Nachdem wir die eingehende Nachricht über JSON.parse (e.postData.contents) analysiert haben , schreiben wir daher sofort in die Protokolle.

Als nächstes bestimmen wir, welches der Teams zu uns gekommen ist.

Wenn es sich nicht um ein Team handelt, überprüfen wir die Gültigkeit, dh ob in VK eine Gruppe vorhanden ist.

sendText - sendet Nachrichten an den Bot (Standard parse_mode = HTML), Dokumentation .

/ getall - wir werden es separat analysieren .

Hab keine Angst vor meiner Entscheidung von

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

Gemacht, um die Zeilen mit Städten zu füllen, während wir uns auf 8-10 Zeilen in 4 Städten beschränken (Variable j = 4).

Wenn die Musikgruppe keine Stadt hat, fügen Sie --- ein.

Nur die Stadt wählen und russische Buchstaben in fangen Bot.gs .

Wir zeigen eine Liste von Links, nichts weiter.


Denken Sie daran, dass der Zugriff auf Dokumentation und das Testen des Bots über die Adressleiste über den kostenlosen Hotspot Shield-VPN-Proxy unbegrenztes VPN ist (für Google Chrome).

Also haben wir drei Möglichkeiten gelernt, unseren Tisch zu betreten:

  • Benutzerskripte im Browser
  • Benutzerskripte in einem mobilen Browser (USI)
  • Telegramm Bot

Was müssen Sie wissen und sich erinnern?


Clubpräfix in VK-Links VK-

Gruppen verfügen über zwei Arten von Identifikatorspeichern.

  1. Der Name ist in Englisch mit gültigen Unterstrichen und Bindestrichen.
  2. ICH WÜRDE

Und sie können alles geben und so weiter.

Überprüfung ist einfach.

Wenn es eine Gruppe gibt, sagen wir vk.com/4soulsband , ersetzen Sie 4soulsband durch group_ids in vk.com/dev/groups.getById . Eine Liste von Parametern wird angezeigt, von denen einer eine ID ist . Und wenn wir ihm den Club vorlegen, voila, gelangen wir auf dieselbe Seite vk.com/club68130764 .

Beschränkung der Speicherung von Gruppen in VK auf 5000

Es scheint lächerlich, aber ich hatte nicht genug. Ich gestehe, dass ich Probleme

beim Aktualisieren der VK-Seite

habe, bis ich den Haken beim Übergang zwischen Seiten in VK überwinden konnte, um das Pluszeichen in Tampermonkey zurückzusetzen. TODO

Verwenden von Google Sheets als Datenbank

  • Plus - Verfügbarkeit
  • Minus - Wenn mehr als 5000 Zeilen angesammelt sind, verlangsamt sich die Arbeit mit der " DB " . Für ernsthafte Projekte ist es daher besser, normales DBMS zu verwenden.

Definition einer Gruppenstadt Die Gruppenadresse

in VK kann hier vk.com/dev/groups.getAddresses sein , wer die Suche nach einer Stadt für eine Gruppe verbessern möchte, kann sie verwenden.

Gesamt


Wir haben:

  1. Google-Datenerfassungstabelle, mit der wir arbeiten gelernt haben.
  2. Kenntnisse der VK API. Das heißt, Sie wissen bereits, dass wir uns nicht auf Musikgruppen beschränken können.
  3. Telegramm-Bot mit einer Datenbank, die nicht bereitgestellt und konfiguriert werden muss.

Mein Ziel ist es nicht, mich mit dem nächsten erstellten Spielzeug zu rühmen, sondern Neulingen (und nicht nur) eine riesige Schicht offener APIs zu zeigen, die dazu beitragen können, das Leben so oder so von der Eisenerde zu den „Wolken“ zu bewegen.

Diese Funktionalität ist bereit, ebenso wie Verbesserungen möglich.

Viel Glück bei der Entwicklung und dem Verständnis von neuem Wissen.

Dokumentation


Google Apps-Skript - Tabellenkalkulationsdienst-
Telegramm-Bot-API
VK-API
Erfahren Sie, wie Sie
Benutzerskripte schreiben . Vertiefung der
Site-Überwachung mithilfe der
Verwöhnung von Google Text & Tabellen. Wir schreiben einen Telegramm-Bot in ein Google-Skript
[Beispiele, Google Apps-Skript] Entwicklung von Add-Ons / Skripten für Google Sheets (Tabellenkalkulationen)
Verwendung von Google-Tabellenkalkulationen zur Überprüfung auf fehlerhafte Links

All Articles