Jangan takut pada JSON atau aplikasi API pertama Anda

Saya memiliki sekitar 8 tahun pengalaman memilih kode. Selama waktu ini, saya berhasil mencoba berbagai bahasa dan teknologi dalam arah yang berbeda: dari "pengembangan" semua jenis lelucon phishing di PHP Devel Studio hingga aplikasi web lengkap pada kerangka kerja modern dan perangkat lunak pada jaringan saraf. By the way, perendaman pertama saya dalam pemrograman terjadi pada usia 12 berkat posting ini . Sekarang saya berada di tahun kedua gelar sarjana di bidang Ilmu Komputer. Sampai saat ini, yaitu, sampai tahun pertama, untuk waktu yang lama saya selalu takut setiap kali saya melihat kata JSON. Dipahami dan dipahami. Tetapi saya perhatikan bahwa banyak orang dari grup saya masih tidak bekerja dengan API apa pun. Saya suka artikel di mana penulis menjelaskan topiknya secara rinci, melampirkan potongan kode dan mengunyah mengapa dan mengapa ia memutuskan untuk melakukannya, dan tidak menceburkan diri pada istilah dan teknologi yang kompleks. Pada artikel ini saya akan menjelaskan penggunaan API (menggunakan PUBG API sebagai contoh) dengan kata-kata sederhana untuk pemula, seperti kata mereka, tanpa omong kosong. Ayo pergi!

gambar

Google colab


Untuk menyelesaikan artikel ini, Anda membutuhkan pengetahuan minimum tentang Python. Dengan "minimal", maksud saya cetak, jika, untuk, yah, semua jenis lembaran, kamus. Kami akan bekerja di lingkungan Kolaborasi Google (selanjutnya - cukup "colab"). Colab adalah lingkungan peramban gratis tempat orang pintar melatih dan menguji program mereka dengan kecerdasan buatan dan melakukan semua jenis penelitian. Tapi sekarang tidak masalah bagi kami, kami tertarik pada format untuk menulis kode di sana: file yang ada di sana disebut "laptop" (dari bahasa Inggris - sebuah notebook). Dalam format ini, kode dapat ditulis dan dieksekusi dalam potongan-potongan (sepotong kode dalam colab disebut "sel kode") langsung di browser.

Mari kita coba:

  1. Kami pergi ke Google Colab dan masuk dengan akun Google Anda
  2. Kami akan disambut oleh halaman utama dengan bantuan tentang cara menggunakan Colab, dan kami membuat laptop pertama kami dengan mengklik File> Notebook Python 3 Baru di sudut kiri atas

    Dalam beberapa detik, kita akan melihat sesuatu yang mirip dengan ini:

  3. Ingat pintasan keyboard berikut:
    Ctrl + Enter (Cmd + Enter for MacOS) - Jalankan sel kode saat ini
    ALT + Enter (Opsi + Enter untuk MacOS) - Jalankan sel kode saat ini, buat dan pergi ke sel kode baru

Dalam sel kode, Anda dapat langsung menulis kode python biasa. Jika kita ingin menjalankan beberapa perintah konsol, maka tanda seru dimasukkan sebelum baris, misalnya:

Kode python

print('Hello, PUBG!') 

Tim konsol

 !mkdir hello_pubg !cd hello_pubg 

Mari kita coba menjalankan beberapa jenis algoritma sederhana, misalnya, menemukan pembagi umum terbesar dari dua angka:

  1. Dalam sel kode yang kita masukkan:

     a = 10 b = 8 

  2. Tekan Alt + Enter (Opsi + Enter untuk MacOS) dan tulis di sel kode baru:

     while a != 0 and b != 0: if a > b: a %= b else: b %= a gcd = a + b 

  3. Tekan Alt + Enter lagi (Opsi + Enter untuk MacOS) dan tulis di sel kode baru:

     print(gcd) 

    dan tekan Ctrl + Enter (Cmd + Enter for MacOS). Kami mendapat jawabannya: 2



Seperti yang Anda lihat, bekerja di Colab sangat sederhana dan menguji beberapa fungsionalitas aplikasi masa depan Anda sangat nyaman di sini. Omong-omong, jika kita ingin mengeksekusi algoritme dengan angka lain, kita perlu mengubah nilai variabel dalam sel kode pertama, mulai, lalu mulai yang kedua dan ketiga.

Kami tidak menutup laptop, mari melangkah lebih jauh.

API PUBG


Sekarang apa itu API dengan kata-kata sederhana. Setiap kali kita mengunjungi situs, server situs ini menjawab dengan kode HTML, yaitu dengan membuka google.com, misalnya, server Google mengirimkan HTML ke browser kita, yang diproses oleh browser itu sendiri, dan browser menunjukkan kepada kita gambar, setelah memproses semua gaya, dll. Tapi ini tidak selalu terjadi, misalnya, mengikuti tautan ini , kita akan melihat sesuatu yang mirip dengan output kamus di python dengan perintah print (). Begitulah. Ini adalah kamus informasi cuaca terkini yang kami dapat dari openweathermap . Dan seseorang tidak akan pernah menangani tanggapan seperti itu dari server sendiri. Pengembang situs ini telah memberi kami tautan tersebut sehingga kami dapat menggunakannya di program kami. Secara umum, jika kita perlu membuat blok cuaca di situs web atau aplikasi kita, maka kita pergi ke openweathermap (atau analog lain yang menyediakan API), buka dokumentasi mereka dan gunakan itu. API dalam decoding dan menerjemahkan ke dalam bahasa Rusia terdengar seperti "antarmuka pemrograman aplikasi", yaitu, kumpulan permintaan dari form site.com/request , yang mengembalikan kamus dengan informasi yang kami butuhkan. Dan format kamus ini disebut JSON. Ada juga format XML, tetapi kami tidak akan menganalisisnya dalam artikel ini.

Pada awalnya, saya menulis bahwa kami akan menggunakan API resmi dari pengembang game PUBG. Mari kita mulai. Berikut adalah sumber yang akan kami verifikasi formasi yang diperoleh, buka di tab baru dan masukkan nama panggilan pemain mana saja dalam pencarian pemain, misalnya, "Twitch_todol". Statistik pemain ini terbuka:



Kami membuka pertandingan terakhirnya (yang pertama dalam daftar) dan melihat semua informasi yang kami butuhkan:



Untuk mendapatkan informasi tentang pertandingan ini dari API PUBG:

  1. Kami pergi ke halaman resmi pengembang PUBG .
  2. Masuk atau daftar di halaman dengan mengklik tombol GET KUNCI API ANDA SENDIRI. Dan tidak masalah apakah kita memainkan game ini atau tidak. Kami hanya perlu mendapatkan token kami dari situs ini, mis. Kunci api.

    Setiap kali, beralih ke server PUBG untuk informasi apa pun, kami harus menyediakannya dengan token unik kami. Ini dilakukan karena berbagai alasan, yang paling jelas adalah bahwa para pengembang game dapat mengetahui siapa yang sebenarnya menerima informasi dari server mereka dan membuat batasan untuk setiap programmer. Dalam hal ini, kami memiliki satu batasan - tidak lebih dari 10 permintaan per menit. Ini lebih dari cukup untuk kita.
  3. Kami membuat aplikasi dan mendapatkan token kami



    Saat ini, tidak terlalu penting apa yang kami masukkan di sini. Kami klik pada aplikasi Buat dan kami melihat serangkaian karakter, tentang jenis ini (gunakan milik Anda, yang ini tidak berfungsi):

     eyJ0eXAiOiJKV1QiLWFeCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5ZjIwYTJkMC0xMzYwLTAxMzgtZTFhYS03ZDVjOWM4YTdjZWUiLCJpc3MiOiJnYW1lbG9ja2VyIiwiaWF04IjoxNTc4MzkwNDQwLCJwdWIiOiJibHVlaG9sZSIsInRpdGxlIjoicHViZyIsImFwcCI6ImxlYW5jb3JlZ2ctZ21hIn0.fwFwEeEw3OghE8sACAHbpKWlJFBVo6F_DbB7dbanybLIIToJc4 

  4. Salin token Anda dan buka tab Anda dengan colab. Anda tidak menutupnya, bukan?
  5. Di sel kode pertama kita memasukkan kode ini:

     import requests url = "endpoint-url" API_KEY = '< >' header = { "Authorization": "Bearer " + API_KEY, "Accept": "application/vnd.api+json" } 

    Dan lari. Dalam kode ini, kami membuat kamus (header), yang berisi parameter dasar untuk mengakses API PUBG. Kami akan mengirimkan kamus ini ke server setiap kali kami ingin mendapatkan sesuatu darinya. Dengan syarat, kami memberi tahu server "Halo, nama saya Petya," - di mana Petya adalah token kami - "Saya ingin menerima informasi dari Anda dalam format JSON!" Saya mendapat sepotong kode yang baru saja saya berikan dari dokumentasi PUBG API di halaman ini .
  6. Sekarang kita perlu memberi tahu apa yang sebenarnya perlu kita dapatkan dari server. Dalam kasus kami, kami ingin mendapatkan game terakhir dari pemain Twitch_todol darinya. Untuk informasi tentang pemain, kami membuat permintaan di
    api.pubg.com/shards/steam/players?filter [playerNames] = Twitch_todol

    Yaitu (di sel kode baru):

     player_name = 'Twitch_todol' r = requests.get('https://api.pubg.com/shards/steam/players?filter[playerNames]=' + player_name, headers=header) player = r.json() 

    di mana pada baris kedua kita menggunakan fungsi dari perpustakaan permintaan, di mana parameter pertama adalah apa yang kita butuhkan dari server, dan parameter kedua adalah kamus header kita. Dengan kata lain, kami mengatakan kepada server "Halo, saya Petya! Saya ingin mendapatkan informasi dari Anda tentang pemutar Twitch_todol dalam format JSON. "

    Dan di baris ketiga, kami menerjemahkan respons dari server ke JSON yang sama ini. Kenapa kita melakukan ini? Faktanya adalah bahwa server tidak mengembalikan respons json kepada kami, tetapi json menerjemahkannya menjadi string. Dan dengan metode .json (), kami mengubah string ini menjadi kamus yang dimengerti oleh Python.

    Mari kita pastikan ini dengan menulis di sel kode baru:

     type(player) 

    jawabannya adalah dict . Artinya, sekarang kita tahu pasti bahwa variabel pemain berisi kamus yang dapat dimengerti oleh Python dengan informasi tentang pemain.
  7. Apa sebenarnya isi kamus ini? Mari kita lihat dengan melakukan

     player.keys() 

    Kami melihat jawabannya:

    dict_keys (['data', 'tautan', 'meta'])

    Ini adalah kunci untuk kamus kami. Apa yang masing-masing berisi tertulis di halaman ini .

    Untuk memastikan bahwa kami mendapatkan pemain yang kami butuhkan, kami akan menulis yang berikut ini:

     player['data'][0]['attributes'] 

    Di sini kita melihat informasi dasar tentang pemain: ketika dia mendaftar, nama panggilannya, di platform mana dia bermain, dan sebagainya.
  8. Kami perlu mendapatkan id dari pertandingan terakhirnya, yang dapat kami verifikasi dengan situs pubg.op.gg, yang sudah terbuka di salah satu tab browser kami. Untuk ini kami menulis:

     player['data'][0]['relationships']['matches']['data'][0]['id'] 

    Kami mendapat sesuatu yang mirip dengan 'ca2c453b-649a-4556-b768-66b9e01aae63' (milik Anda mungkin berbeda, karena pemain saat membaca artikel ini sudah dapat memainkan beberapa pertandingan). Gunakan apa yang Anda dapatkan sendiri. Saya memberi Anda contoh agar Anda tidak bingung.

    Jadi, kami tahu id pertandingan, sekarang mari kita dapatkan informasi tentang pertandingan ini, untuk ini kami membuat variabel match_id, yang kami samakan dengan id yang kami terima. Dan kami membuat permintaan di alamat yang sedikit berbeda, tetapi menurut skema yang biasa, yaitu, seperti ini:

     match_id = player['data'][0]['relationships']['matches']['data'][0]['id'] # id  r = requests.get('https://api.pubg.com/shards/steam/matches/' + match_id, headers=header) match = r.json() 

  9. Variabel kecocokan, yang merupakan kamus, berisi semua informasi tentang kecocokan ini. Untuk memulai, kami mendapatkan kinerja semua pemain di pertandingan ini:

     match_players = [item for item in match['included'] if item['type'] == 'participant'] match_players 

    Dalam hal ini, kami mengisi daftar pemain (match_players), melalui pertandingan kamus ['termasuk'] ('termasuk' adalah kunci kamus kamus yang berisi indikator semua pemain dalam pertandingan), secara bersamaan memeriksa nilai kunci 'tipe'. Mengapa kami memeriksa jika
    cocok ['termasuk'] berisi informasi pemain? Faktanya adalah bahwa ini tidak sepenuhnya benar, pertandingan ['termasuk'] juga berisi informasi tentang tim yang dimainkan para pemain ini (yaitu, item ['tipe'] dapat sama dengan 'daftar'). Artinya, cocok ['termasuk'] terlihat seperti ini:

    [pemain, tim, tim, pemain, pemain, pemain, tim, ...]

    Tidak sepenuhnya jelas mengapa pengembang memutuskan untuk melakukan hal itu, tetapi ini tidak mengganggu kami dengan cara apa pun.

    Jadi, kami mendapatkan kinerja para pemain, tetapi kami tidak terlalu tertarik dengan bagaimana pemain lain bermain dalam pertandingan ini, kami akan melihat kinerja pemain kami Twitch_todol di pertandingan ini. Untuk melakukan ini, kami melakukan:

     my_player_stats = [item for item in match_players if item['attributes']['stats']['name'] == player_name][0] my_player_stats 


Bandingkan statistik yang dihasilkan:



dengan statistik di pubg.op.gg



Kami melihat bahwa semuanya bertepatan. Bersukacitalah! Ngomong-ngomong, ketika saya sedang menulis artikel ini, pahlawan kita telah berhasil memainkan beberapa pertandingan, sehingga beberapa tangkapan layar yang saya berikan di atas mungkin tidak bersamaan.

Penyelesaian


Dalam artikel ini saya ingin memberi tahu programmer terkecil kami bahwa Anda tidak perlu takut dengan kata-kata JSON dan API, bahwa mereka mudah dan jelas diimplementasikan dan dokumentasi dilampirkan pada masing-masing. Saya mencoba menjelaskan ini dalam bahasa yang paling mudah diakses, tanpa menggunakan istilah yang rumit.

Dan juga, saya ingin berterima kasih kepada Habr dan penulis ( ArhMax ) karena membantu saya menulis kode untuk pertama kalinya 8 tahun yang lalu.

Source: https://habr.com/ru/post/id483964/


All Articles