Penambahan cerdas grup musik ke Google Sheets melalui VK API, Tampermonkey, dan bot Telegram

Bagaimana cara mengatur penyimpanan musik di Google Sheets dengan dukungan dari berbagai program?


Diberikan : Akun di Google, VK, Telegram.
Tugas : Buat repositori grup musik dengan kemungkinan pengisian yang mudah.
Alat : Skrip Google Apps (GAS), API VK, Tampermonkey, API Telegram Bot.

Buat Google Sheets


Buat Google Sheets baru.

Kami membuat tajuk yang tetap (maka semua siklus enumerasi sel, karena ini, akan dimulai bukan dari 0, tetapi dari 1).

Pada prinsipnya, template kami sudah siap.

Satu-satunya hal adalah, saya tidak mengikat kolom melalui nama-nama (saya tidak ingin menggunakan loop), jadi sepanjang skrip saya akan merujuk ke nomor kolom yang terprogram.

Klik "Alat - Editor Skrip."



2 Buat script: Kod.gs dan 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)
}


Lebih detail di bawah ini.

Klik " Publikasikan - Menyebarkan sebagai aplikasi web ."



Sekarang kami memiliki tautan dari form script.google.com/macros/s/AAA/exec , menggantikan parameter "tautan" ke dalamnya, kami dapat menambahkan grup VK ke Google Table.

Skrip pengguna di browser


Cara pertama dan utama memasukkan data!

Buka browser Google Chrome atau Mozilla Firefox dan instal plugin skrip pengguna Tampermonkey.

Tautan untuk Chrome , untuk Mozilla .

Awalnya digunakan Greasemonkey, tetapi harus beralih ke Tampermonkey karena kompatibilitas lintas-browser.

Siapa yang akan memiliki pertanyaan mengapa parameter skrip pengguna mulai dengan awalan GM_ , dan bukan TM_ - idenya bukan milik saya, buka dokumentasi .


Kami menyisipkan skrip vkGroupToGS dengan mengklik tab pertama dengan tanda tambah.

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


"File - Simpan."


Seperti yang Anda lihat, skrip kami menggambar tanda plus (yang cukup untuk imajinasi) di blok kiri left_menu_nav_wrap .


Dengan mengklik tanda plus, GM_xmlhttpRequest dari vkGroupToGS dieksekusi dalam skrip Code.gs kami menggunakan tautan Google Sheets yang terlampir di atas (url_first).

Tampermonkey akan meminta kami untuk mengaitkan 2 skrip ini dengan hak, klik " Selalu bolehkan " atau " Selalu izinkan domain " untuk " script.google.com ". Ulangi sesuai kebutuhan untuk " script.googleusercontent.com ".


Segera setelah permintaan berhasil terbang, panggilan balik dari GM_xmlhttpRequest akan datang dan warna tombol kami hijau setelah penambahan berhasil atau merah jika kesalahan kembali.

Plus Tampermonkey - penyimpanan skrip berbasis cloud di Google (sebelumnya tidak) di hadapan kesuburan dan imajinasi mereka.

Kembali ke Google Sheets.

Sebelum mulai menguraikan Code.gs kami , saya ingin berbagi dokumentasi untuk pengembangan di VK - vk.com/dev

Token VK


Memperoleh kunci akses.
Membuat permintaan ke VKontakte API.

Sejauh ini saya hanya belajar satu cara untuk mendapatkan token - melalui aplikasi yang ditulis sendiri.

Kami datang ke sini .
Platform - " Aplikasi mandiri ".
Setelah membuat, yang kita butuhkan adalah ID aplikasi (sekarang tujuh digit), biarlah 1234567.
Tapi kita perlu token.
Sangat baik tentang token ditulis dalam Meet the VK API .

Jika kami tidak ingin membaca, cukup buka tautan dengan memasukkan ID aplikasi Anda ke client_id . Kami dialihkan ke halaman dengan tulisan:


Harap jangan menyalin data dari bilah alamat untuk situs pihak ketiga. Dengan demikian, Anda dapat kehilangan akses ke akun Anda.

Dan itu benar, berhati-hatilah dengan tokennya!

Kami menyalin token dari bilah alamat setelah access_token .

Saya akan segera membagikannya dengan token ini yang dapat Anda query seperti vk.com/dev/groups.search?params%5Bq%5D=%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0¶ms % 5Btipe% 5D = halaman & params% 5Bcountry_id% 5D = 1 & params% 5Bcity_id% 5D = 1 & params% 5Pasar% 5D = 0 & params% 5Persetelan% 5D = 0 & params% 5Bmount% 5D = 5 & par 5% 5%

dapat dikonversi dengan aman ke tautan 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=1 0 & pasar = 0 & offset = 0 & hitung = 10 & access_token = 1111111111111 & v = 5.107 dan menerima informasi dalam aplikasi apa pun.



Saya membuka kotak Pandora kecil, mungkin ini bukan berita, tetapi dengan cara ini Anda bisa mendapatkan banyak hal berguna dari VK, mengotomatisasi banyak proses dan membuat banyak hal yang nyaman.

Tentu saja, dengan batasan tertentu , katakanlah tidak lebih dari 999 entitas dalam respons atau 20 permintaan per detik, dll.

Juga, seseorang akan tertarik bermain dengan file yang disimpan - dalam aplikasi kita tab " Prosedur Tersimpan ".

Ini memiliki aturan sendiri untuk menarik informasi, yang sangat nyaman untuk kueri berurutan, sehingga tidak membuat banyak loop dalam kode Anda.

Ikuti versinya!

Dengan perubahannya, fungsionalitas metode dapat berubah. Sekarang saya menerapkan contoh untuk versi 5.107 .

Jadi, kami memiliki

tokennya , buka ... Code.gs

doGet (e) - Kami menerima permintaan dapatkan yang masuk dari bot, VK, dan hanya dari browser.
Parameter input diuraikan, seperti e.parameters ['INPUT_Parameter']
Tautan tiba, periksa untuk melihat apakah ada tabel. Jika tidak, minta informasi terperinci melalui groups.getById , parsim, tambahkan.

! Perhatian! Skripnya sederhana, jadi ia akan menelan semua tautan masuk, jadi berhati-hatilah bahkan memasukkan 123 saat memeriksa skrip.

searchGenre - pencarian cerdas untuk gaya / genre grup, karena itu saya menempatkan label "ekspresi reguler" di artikel.

Perbaikan dimungkinkan.

Sementara itu berfungsi hanya untuk mencari string kata berikutnya melalui garis miring atau tanda hubung setelah kata-kata "style atau genre atau genre ".

isRus adalah aturan reguler yang sederhana tidak termasuk huruf Rusia.
sort - sorting. Saya menetapkan default ke 1. city, 2. name.
searchExists - pencarian sederhana untuk grup yang ada melalui loop.
addInfo - membuat skrip untuk saya sendiri, meninggalkannya di sini , sebagai bonus. Diperlukan jika Anda memiliki daftar tautan, tetapi tidak ada data di dalamnya.

Masukkan daftar ke dalam kolom "Tautan", klik " Isi ulang kosong " di menu utama dan kolom lainnya diisi ulang dari VK.

Karena pembatasan jumlah karakter di UrlFetchApp .fetch dan jumlah tautan yang ditempatkan di bilah alamat harus membuat siklus 1000 karakter.

getVkFave- Bonus lain yang muncul di kepala saya saat menulis artikel dan yang saya sendiri mulai gunakan.

Intinya adalah kita masuk ke aplikasi VC dari telepon, menemukan grup yang ingin kita simpan, menyimpannya di bookmark dengan label " grup musik " ditambahkan terlebih dahulu (global variable faveTag ).

Bagaimana mereka terakumulasi, buka Tabel Google kami, buka menu, klik " Ambil bookmark dari VK ".

Script dengan token merangkak ke api.vk.com/method/fave.getTags , mem-parsing, menambah tabel, setelah sebelumnya memperingatkan penghapusan dari VC (di sini, lebih akurat dengan pengujian, semuanya dihapus sepenuhnya dari bookmark dengan tag ini ).

getStatusUrl dan centangActualLink- percobaan yang menghasilkan 2 skrip.
Intinya adalah untuk memeriksa validitas dan akses ke tautan.

Karena selama bertahun-tahun akumulasi kelompok musik, saya dihadapkan dengan fakta bahwa catatan publik dihapus atau diganti namanya.

Siapa yang akan menggunakan kemudahan saya, saya menyarankan beberapa TODO , yang tidak hanya akan menghapus tautan yang tidak valid, tetapi juga memeriksa keberadaan di VK melalui groups.search dengan nama.

checkActualLink - satu kali memeriksa validitas dengan mewarnai tidak valid dalam warna merah.

  • Minus - kecepatan rendah.
  • Plus - Anda dapat melakukannya kapan pun Anda mau.

getStatusUrl - dipanggil dalam sel melalui skrip

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

Dia mengambil dasar dari sini .

  • Minus - berjalan untuk semua sel setiap kali halaman dibuka.
  • — , , checkActualLink.

Berikutnya adalah kemudahan untuk skrip google:

addInTableFromArray - Tambahkan baris ke tabel. Baik dari siklus atau satu kali.
getNumSheet - Cari nomor lembar berdasarkan nama. Jujur, saya tidak menemukan cara yang lebih sederhana di internet daripada yang ini. Ini perlu karena pergeseran nomor lembar saat menambahkan yang baru. Dia mengambil dasar dari sini .
escapeHtml - karakter khusus Delete
akan - dibuat Logger.log singkat untuk dirinya sendiri , mengurangi waktu, saya menyarankan.
onOpen - Fitur yang biasa digunakan untuk menggambar menu di Google Sheets.

Jadi, Code.gs kami menangkap tautan dari VK melalui Tampermonkey dan menambahkan grup ke Google Table.

Nyalakan kemalasan


  • Kami duduk di depan komputer.
  • Kami duduk di telepon.

Dari komputer, kami belajar cara menambahkan grup melalui " tanda tambah " di VK dan melalui bookmark.
Melalui telepon, hanya melalui bookmark di aplikasi VK.

Mari kita lihat dua opsi lagi untuk membuat grup.

USI


Skrip pengguna di browser seluler.

Untuk beberapa orang itu akan tampak kuno dan tidak perlu, tetapi akan ada orang-orang yang akan mengambil kelebihan dari itu.

Pencarian di Internet sejauh ini hanya menemukan plugin semacam itu .
Ini hanya berfungsi di Firefox (hanya diuji di android).

Nilai tambah yang besar - Anda dapat menggunakan skrip Tampermonkey.

Karena perbedaan tata letak antara vk.com dan m.vk.com , dan juga karena membuka jendela default di m.vk.com, saya tidak menggambar tanda tambah , tetapi membuat skrip sederhana VK_event_to_list_mvk yang berfungsi saat jendela terbuka (bakar saya) di neraka untuk setTimeout , saya tahu).

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


Kami membuat bot sesuai dengan instruksi .
Kita memerlukan token, biarkan 123123.

Buat skrip Bot.gs , masukkan 123123 ke dalam variabel botApi , framing dengan tanda kutip dan tautan api.telegram.org .

Selanjutnya, kita perlu menautkan bot kita dengan Google Sheets. Anda dapat melihat bagaimana melakukan ini melalui WebHook di artikel sebelumnya .

Apa yang akan dilakukan bot kami?

Kami membusuk dengan perintah:

  • / start - Mulai bot
  • / sort - Sortir
  • / getvkfave - Ambil bookmark dari VK
  • / addinfo - Isi kosong
  • / getall - Dapatkan semua grup

Kami melihat bahwa kami memiliki awal bot, di sana kami hanya akan memasukkan tutorial dengan bagian deskriptif sesuai kebijaksanaan Anda.

Tiga perintah dari menu utama untuk berjaga-jaga.

Dan bonus selanjutnya adalah / getall , tentangnya di bawah ini.

Perintah untuk panggilan yang mudah (tulis garis miring di baris input pesan) dapat ditambahkan ke @BotFather melalui / setcommand yang sama.

Format - garis melalui tanda hubung:

start -   
sort - 
getvkfave -    
addinfo -  
getall -   


Bot.gs

doPost - menerima pesan masuk dari bot.

Secara alami, sebagai seorang programmer yang ingin tahu, saya segera mulai menggunakan log. Mungkin ada cara yang lebih mudah, tapi saya baru saja membuat lembar baru, menyebutnya "Log" dan saya menangkap permintaan masuk di sel pertama.

Oleh karena itu, setelah kami mem -parsing pesan masuk melalui JSON.parse (e.postData.contents) , kami segera menulis ke log.

Selanjutnya, kami menentukan tim mana yang datang kepada kami.

Jika bukan tim, kami memeriksa validitasnya, yaitu apakah ada grup di VK.

sendText - mengirim pesan ke bot (parse_mode = HTML) default, dokumentasi .

/ getall - kami akan menganalisisnya secara terpisah.

Jangan takut dengan keputusan saya

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

Dibuat untuk mengisi garis dengan kota, sementara kami membatasi diri hingga 8-10 garis di 4 kota (variabel j = 4).

Jika grup musik tanpa kota, masukkan ---.

Hanya memilih kota dan menangkap huruf Rusia di Bot.gs .

Kami menampilkan daftar tautan, tidak lebih.


Ingatlah bahwa akses ke dokumentasi dan pengujian bot melalui bilah alamat melalui Proxy VPN Gratis Hotspot Shield adalah VPN Tidak Terbatas (untuk Google Chrome).

Jadi kami belajar tiga cara untuk memasuki meja kami:

  • Skrip pengguna di browser
  • Skrip Pengguna di Browser Seluler (USI)
  • Telegram Bot

Apa yang perlu Anda ketahui dan ingat?


Club awalan dalam tautan VK

Grup VK memiliki 2 jenis penyimpanan pengenal.

  1. Nama ini dalam bahasa Inggris dengan garis bawah dan tanda hubung yang valid.
  2. Indo

Dan mereka bisa memberikan yang terbaik dan sebagainya.

Cek itu sederhana.

Jika ada grup, misalkan vk.com/4soulsband , gantikan 4soulsband ke dalam group_ids di vk.com/dev/groups.getById , daftar parameter ditampilkan, salah satunya adalah ID . Dan jika kita menempatkan klub di depannya , voila, kita menuju ke halaman yang sama vk.com/club68130764 .

Membatasi penyimpanan grup di VK hingga 5000

Tampaknya konyol, tapi saya tidak punya cukup.

Rasa sakit saya dengan memperbarui halaman VK

saya akui sampai saya bisa mengalahkan tangkapan transisi antara halaman di VK untuk mengatur ulang tanda tambah di Tampermonkey. TODO

Menggunakan Google Sheets sebagai DB

  • Plus - ketersediaan
  • Minus - ketika lebih dari 5000 baris diakumulasikan, bekerja dengan " DB " melambat . Jadi untuk proyek-proyek serius lebih baik menggunakan DBMS normal.

Definisi kota grup

Alamat grup di VK dapat di sini vk.com/dev/groups.getAddresses , masing-masing, yang ingin meningkatkan pencarian kota untuk grup dapat menggunakannya.

Total


Kita punya:

  1. Tabel pengumpulan data Google tempat kami belajar bekerja.
  2. Pengetahuan tentang VK API. Artinya, Anda sudah sadar bahwa kita tidak bisa terbatas pada grup musik.
  3. Telegram Bot dengan database yang tidak perlu digunakan dan dikonfigurasi.

Tujuan saya bukan untuk menyombongkan mainan yang dibuat berikutnya, tujuan saya adalah untuk menunjukkan pendatang baru (dan tidak hanya) lapisan besar API terbuka yang dapat membantu membuat hidup ke satu derajat atau yang lain, bergerak dari bumi besi ke "awan", sehingga untuk berbicara.

Fungsionalitas ini siap, juga terbuka untuk peningkatan.

Semoga berhasil dalam pengembangan dan pemahaman pengetahuan baru.

Dokumentasi


Google Apps Script - Layanan Spreadsheet
Telegram Bot API
VK API
Belajar menulis
skrip usersScript skrip. Pendalaman
Pemantauan Situs Menggunakan Google Docs
Pampering. Kami menulis bot Telegram pada skrip Google
[Contoh, Skrip Google Apps] Pengembangan add-ons / skrip untuk Google Sheets (spreadsheets)
Cara menggunakan google spreadsheets untuk memeriksa tautan yang rusak

All Articles