Adição inteligente de grupos musicais ao Planilhas Google via API VK, Tampermonkey e Telegram bot

Como organizo o armazenamento de músicas no Planilhas Google com suporte de vários programas?


Dado : Contas no Google, VK, Telegram.
Tarefa : Crie um repositório de grupos de música com a possibilidade de reabastecimento conveniente.
Ferramentas : Script do Google Apps (GAS), API VK, Tampermonkey, API Bot de telegrama.

Criar Planilhas Google


Crie um novo Planilhas Google.

Criamos um cabeçalho fixo (todos os ciclos de enumeração de células, por causa disso, começarão não a partir de 0, mas a partir de 1).

Em princípio, nosso modelo está pronto.

A única coisa é que eu não vinculei as colunas através dos nomes (não queria usar loops); portanto, ao longo do script, vou me referir ao número da coluna com fio.

Clique em "Ferramentas - Editor de scripts".



2 Crie um script: Kod.gs e 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)
}


Mais detalhes abaixo.

Clique em " Publicar - Implantar como um aplicativo Web ".



Agora temos um link no formulário script.google.com/macros/s/AAA/exec , substituindo o parâmetro "link" nele, podemos adicionar o grupo VK à tabela do Google.

Scripts de usuário no navegador


A primeira e principal maneira de inserir dados!

Abra o navegador Google Chrome ou Mozilla Firefox e instale o plug-in de script do usuário Tampermonkey.

Links para Chrome , para Mozilla .

Originalmente usado Greasemonkey, mas teve que mudar para Tampermonkey devido à compatibilidade entre navegadores.

Quem terá dúvidas sobre o motivo de os parâmetros do script do usuário começarem com o prefixo GM_ e não com TM_ - a idéia não é minha, vá para a documentação .


Nós inserimos o script vkGroupToGS clicando na primeira guia com um sinal de adição.

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


"Arquivo - Salvar".


Como você pode ver, nosso script desenha um sinal de mais (o suficiente para a imaginação) no bloco esquerdo left_menu_nav_wrap .


Ao clicar no sinal de adição, GM_xmlhttpRequest de vkGroupToGS é executado em nosso script Code.gs usando o link do Planilhas Google anexado acima (url_first).

A Tampermonkey solicitará a associação desses dois scripts aos direitos. Clique em " Sempre permitir " ou " Sempre permitir domínio " em " script.google.com ". Repita conforme necessário para " script.googleusercontent.com ".


Assim que a solicitação for concluída com êxito, o retorno de chamada de GM_xmlhttpRequest aparecerá e colorirá nosso botão em verde após a adição bem-sucedida ou em vermelho se o erro retornar.

Tampermonkey Plus - armazenamento de scripts baseado em nuvem no Google (anteriormente não) na presença de sua fertilidade e imaginação.

Voltar para o Planilhas Google.

Antes de começar a analisar nosso Code.gs, quero compartilhar a documentação para desenvolvimento em VK - vk.com/dev

Token VK


Obtendo uma chave de acesso
Fazendo solicitações à API do VKontakte

Até agora, aprendi apenas uma maneira de obter um token - por meio de aplicativos auto-escritos.

Nós viemos aqui .
Plataforma - " Aplicativo autônomo ".
Após a criação, tudo o que precisamos é de um ID do aplicativo (agora com sete dígitos), que seja 1234567.
Mas precisamos de um token.
Muito bem sobre o token está escrito em Conheça a API VK .

Se não quisermos ler, basta abrir o link inserindo o ID do aplicativo em client_id . Somos redirecionados para uma página com a inscrição:


Por favor, não copie os dados da barra de endereço para sites de terceiros. Assim, você pode perder o acesso à sua conta.

E isso mesmo, tenha muito cuidado com o token!

Copiamos o token da barra de endereço após access_token .

Compartilharei imediatamente que, com esse token, você pode consultar como vk.com/dev/groups.search?params%5Bq%5D=%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0¶ms % 5Btype% 5D = página e parâmetros% 5Bcountry_id% 5D = 1 e parâmetros% 5Bcity_id% 5D = 1 e parâmetros% 5Bmarket% 5D = 0 e parâmetros% 5Boffset% 5D = 0 e parâmetros% 5Bcount% 5D = 5 e parâmetros% 5Bcount% 5D 5D = 5 e parâmetros

pode ser convertido com segurança em links 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 e receba informações em qualquer aplicativo.



Abri uma pequena caixa de Pandora, talvez isso não seja novidade, mas dessa maneira você pode obter muitas coisas úteis da VK, automatizar muitos processos e fazer muitas coisas convenientes.

Obviamente, com certas limitações , digamos não mais que 999 entidades na resposta ou 20 solicitações por segundo, etc.

Além disso, alguém estará interessado em jogar com os arquivos armazenados - em nosso aplicativo, a guia " Procedimentos armazenados ".

Ele possui regras próprias para obter informações, o que é muito conveniente para consultas seqüenciais, para não fazer muitos loops no seu código.

Siga as versões!

Com suas alterações, a funcionalidade dos métodos pode mudar. Agora estou aplicando exemplos para a versão 5.107 .

Então, temos o token, vá para ...

Code.gs

doGet (e) - Aceitamos solicitações de recebimento do bot, VK e apenas do navegador.
Os parâmetros de entrada são analisados, como e.parameters ['INPUT_Parameter']
Um link chega, verifique se há uma tabela. Caso contrário, solicite informações detalhadas via groups.getById , parsim, add.

! Atenção! O script é simples, portanto engolirá todos os links de entrada; portanto, tenha cuidado ao inserir 123 ao verificar o script.

searchGenre - uma pesquisa inteligente para o estilo / gênero do grupo, pelo qual coloquei o rótulo “expressões regulares” no artigo.

Melhorias são possíveis.

Embora ele funcione apenas para pesquisar a sequência de palavras subsequente por meio de uma barra ou hífen após as palavras "estilo ou gênero ou gênero ".

isRus é uma regra regular simples, excluindo letras russas.
classificação - classificação.
Defino o padrão como 1. cidade, 2. nome. searchExists - pesquisa simples de grupos existentes por meio de um loop.
addInfo - criou um script para mim, foi deixado aqui , como um bônus. É necessário se você tiver uma lista de links, mas não houver dados.

Insira a lista na coluna "Link", clique em " Recarregar vazio " no menu principal e as colunas restantes serão reabastecidas da VK.

Devido a restrições no número de caracteres no UrlFetchApp .fetch e do número de ligações colocados na barra de endereços tinha que fazer um ciclo de 1000 caracteres.

getVkFave- Outro bônus que ocorreu na minha cabeça enquanto escrevia um artigo e que eu próprio comecei a usar.

O ponto principal é que entramos no aplicativo VC pelo telefone, encontramos o grupo que queremos salvar, salve-o nos favoritos com o rótulo “ music groupadicionado antecipadamente (variável global faveTag ).

Como eles se acumulam, acesse nossa Tabela do Google, acesse o menu, clique em " Recuperar favoritos da VK ".

O script com o token rastreia para api.vk.com/method/fave.getTags , analisa e adiciona à tabela, tendo avisado anteriormente sobre a remoção do VC (aqui, mais precisamente com o teste, tudo é excluído completamente dos marcadores com essa tag ).

getStatusUrl e checkActualLink- um experimento que resultou em 2 scripts.
A linha inferior é verificar a validade e o acesso aos links.

Porque ao longo dos anos de acumulação de grupos musicais, fui confrontado com o fato de os registros públicos serem excluídos ou renomeados.

Quem usará minha conveniência, aconselho alguns TODO , que não apenas excluirão links inválidos, mas também verificarão a presença no VK através de groups.search por nome.

checkActualLink - verifica uma vez a validade colorindo inválido em vermelho.

  • Menos - baixa velocidade.
  • Além disso - você pode fazer quando quiser.

getStatusUrl - chamado na célula por meio de um script

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

Ele tomou a base daqui .

  • Menos - é executado para todas as células sempre que a página é aberta.
  • — , , checkActualLink.

Em seguida, vem a conveniência dos scripts do Google:

addInTableFromArray - adicione uma linha à tabela. Do ciclo ou de uma só vez.
getNumSheet - Procure o número da planilha pelo nome. Sinceramente, não achei uma maneira mais simples na Internet do que isso. Isso é necessário devido à troca de números de folhas ao adicionar novos. Ele tomou a base daqui .
escapeHtml - caracteres especiais Excluir
ll - fez Logger.log curto para si , reduz o tempo, eu aconselho.
onOpen - um recurso familiar para desenhar menus no Planilhas Google.

Portanto, nosso Code.gs captura links do VK através do Tampermonkey e adiciona grupos à Tabela do Google.

Ative a preguiça


  • Estamos sentados em frente ao computador.
  • Estamos sentados no telefone.

Em um computador, aprendemos como adicionar grupos através do " sinal de adição " no VK e através dos favoritos.
Através do telefone, somente através de marcadores no aplicativo VK.

Vejamos mais duas opções para formar grupos.

USI


Scripts de usuário em um navegador móvel.

Para alguns, parecerá antiquado e desnecessário, mas haverá pessoas que tirarão os profissionais disso.

Até agora, a pesquisa na Internet encontrou apenas esse plug-in .
Funciona apenas no Firefox (testado apenas no Android).

Uma enorme vantagem - você pode usar o script Tampermonkey.

Devido às diferenças no layout entre vk.com e m.vk.com , e também por causa da abertura da janela do padrão no m.vk.com, eu não desenhar um sinal de mais , mas fez um script simples VK_event_to_list_mvk que funciona quando a janela é aberta (Estou queimando no inferno por setTimeout , eu sei).

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


Criamos um bot de acordo com as instruções .
Precisamos de um token, que seja 123123.

Crie um script Bot.gs , insira nosso 123123 na variável botApi , enquadrando-o com aspas e no link api.telegram.org .

Em seguida, precisamos vincular nosso bot ao Planilhas Google. Você pode ver como fazer isso via WebHook no artigo anterior .

O que o nosso bot fará?

Nós decompomos pelos comandos:

  • / start - Inicia o bot
  • / sort - Classificar
  • / getvkfave - Recupera favoritos do VK
  • / addinfo - Preencher vazio
  • / getall - Obter todos os grupos

Vemos que temos o início do bot, onde inseriremos apenas um tutorial com uma parte descritiva a seu critério.

Três comandos no menu principal, por precaução.

E o próximo bônus é / getall , sobre isso abaixo.

Comandos para chamadas convenientes (escreva uma barra na linha de entrada de mensagens) podem ser adicionados ao mesmo @BotFather via / setcommands.

Formato - linhas através de um traço:

start -   
sort - 
getvkfave -    
addinfo -  
getall -   


Bot.gs

doPost - aceita mensagens recebidas do bot.

Naturalmente, como programador curioso, comecei imediatamente a usar logs. Talvez haja maneiras mais fáceis, mas acabei de criar uma nova planilha, denominada “Logs” e capturar solicitações recebidas na primeira célula.

Portanto, depois de analisarmos a mensagem recebida por meio do JSON.parse (e.postData.contents) , gravamos imediatamente nos logs.

Em seguida, determinamos quais das equipes vieram até nós.

Se não for um time, verificamos a validade, ou seja, existe um grupo no VK.

sendText - envia mensagens para o bot (padrão parse_mode = HTML), documentação .

/ getall - vamos analisá-lo separadamente.

Não tenha medo da minha decisão de

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

Feito para preencher as linhas com cidades, enquanto nos restringimos a 8 a 10 linhas em 4 cidades (variável j = 4).

Se o grupo de músicas estiver sem cidade, insira ---.

Basta escolher a cidade e pegar letras russas em Bot.gs .

Exibimos uma lista de links, nada mais.


Lembre-se de que o acesso à documentação e o teste do bot pela barra de endereço através do Proxy VPN gratuito do Hotspot Shield é VPN ilimitado (para Google Chrome).

Então, aprendemos três maneiras de entrar na nossa mesa:

  • Scripts de usuário no navegador
  • Scripts de usuário em um navegador móvel (USI)
  • Telegram Bot

O que você precisa saber e lembrar?


O prefixo do clube nos links VK Os

grupos VK têm 2 tipos de armazenamento de identificador.

  1. O nome está em inglês com sublinhados e hífens válidos.
  2. EU IRIA

E eles podem dar tudo de melhor e assim por diante.

Cheque é simples.

Se houver um grupo, digamos vk.com/4soulsband , substitua 4soulsband em group_ids em vk.com/dev/groups.getById , uma lista de parâmetros será exibida, um dos quais é um ID . E se colocarmos o taco na frente dele , voila, chegaremos à mesma página vk.com/club68130764 .

Limitar o armazenamento de grupos no VK para 5000

Parece ridículo, mas eu não tinha o suficiente. Confesso que estou

sofrendo com a atualização da página do VK

até que consegui derrotar a captura da transição entre as páginas no VK para redefinir o sinal de mais no Tampermonkey. TODO

Usando planilhas do Google como um DB

  • Plus - disponibilidade
  • Menos - quando mais de 5000 linhas são acumuladas, o trabalho com o " DB " fica mais lento . Portanto, para projetos sérios, é melhor usar o DBMS normal.

Definição de uma cidade do grupo O

endereço do grupo na VK pode estar aqui em vk.com/dev/groups.getAddresses , respectivamente, quem deseja melhorar a pesquisa de uma cidade para um grupo pode usá-lo.

Total


Nós temos:

  1. Tabela de coleta de dados do Google com a qual aprendemos a trabalhar.
  2. Conhecimento da API VK. Ou seja, você já está ciente de que não podemos nos limitar a grupos musicais.
  3. Telegrama Bot com um banco de dados que não precisa ser implantado e configurado.

Meu objetivo não é se gabar do próximo brinquedo criado; meu objetivo é mostrar aos recém-chegados (e não apenas) uma enorme camada de APIs abertas que podem ajudar a tornar a vida em um grau ou outro, passar da terra de ferro para as "nuvens", por assim dizer.

Essa funcionalidade está pronta, pois está aberta para melhorias.

Boa sorte no desenvolvimento e compreensão de novos conhecimentos.

Documentação


Script do Google Apps - Serviço de planilha
API do Bot de telegrama API
VK
Aprenda a escrever scripts de
usuário scripts de usuário. Aprofundando o
monitoramento do site usando o Google Docs
Pampering. Escrevemos o Telegram bot no script do Google
[Exemplos, script do Google Apps] Desenvolvimento de complementos / scripts para o Planilhas Google (planilhas)
Como usar as planilhas do Google para verificar se há links quebrados

All Articles