Git

Berinteraksi dengan GitHub API menggunakan Python 3

Berinteraksi dengan GitHub API menggunakan Python 3
GitHub sebagai aplikasi web adalah entiti besar dan kompleks. Fikirkan semua repositori, pengguna, cawangan, komit, komen, kunci SSH dan aplikasi pihak ketiga yang merupakan sebahagian daripadanya. Lebih-lebih lagi, terdapat pelbagai cara untuk berkomunikasi dengannya. Terdapat aplikasi desktop untuk GitHub, sambungan untuk Visual Studio Code dan Atom Editor, git cli, aplikasi Android dan iOS untuk menamakan beberapa.

Orang-orang di GitHub, dan pemaju pihak ketiga, tidak mungkin dapat menguruskan semua kerumitan ini tanpa antara muka yang sama. Antara muka biasa ini adalah apa yang kita panggil API GitHub. Setiap utiliti GitHub seperti cli, UI web, dan lain-lain menggunakan antara muka yang biasa ini untuk menguruskan sumber (sumber adalah entiti seperti repositori, kunci ssh, dll).

Dalam tutorial ini kita akan mempelajari beberapa asas bagaimana seseorang berinteraksi dengan API menggunakan GitHub API v3 dan Python3. API GitHub v4 terbaru memerlukan anda belajar mengenai GraphQL yang menghasilkan keluk pembelajaran yang lebih curam. Oleh itu, saya akan berpegang pada versi tiga sahaja yang masih aktif dan cukup popular.

Cara bercakap dengan API web

API Web adalah yang membolehkan anda menggunakan semua perkhidmatan yang ditawarkan oleh aplikasi web, seperti GitHub, menggunakan bahasa pilihan anda secara terprogram. Sebagai contoh, kita akan menggunakan Python untuk kes penggunaan kita, di sini. Secara teknikal, anda boleh melakukan semua yang anda lakukan di GitHub menggunakan API tetapi kami akan mengehadkan diri untuk hanya membaca maklumat yang boleh diakses oleh orang ramai.

Program Python anda akan bercakap dengan API dengan cara yang sama seperti penyemak imbas anda bercakap dengan laman web. Maksudnya, kebanyakannya melalui permintaan HTTPS. Permintaan ini akan mengandungi 'bahagian' yang berbeza, bermula dari kaedah permintaan [GET, POST, PUT, DELETE], URL itu sendiri, rentetan pertanyaan, header HTTP dan badan atau muatan. Sebilangan besar adalah pilihan. Walau bagaimanapun, kami perlu memberikan kaedah permintaan dan URL tempat kami membuat permintaan tersebut.

Apa ini dan bagaimana mereka diwakili dalam permintaan HTTPS adalah sesuatu yang akan kita lihat perlahan ketika kita mula menulis Skrip Python untuk berinteraksi dengan GitHub.

Satu contoh

Menambah kunci SSH ke pelayan yang baru dibuat selalu menjadi proses yang canggung. Mari tulis skrip Python yang akan mengambil kunci SSH awam anda dari GitHub dan menambahkannya ke fail Author_keys di mana-mana pelayan Linux atau Unix di mana anda menjalankan skrip ini. Sekiranya anda tidak tahu membuat atau menggunakan kekunci SSH, berikut adalah artikel yang sangat baik mengenai cara melakukannya. Saya akan menganggap bahawa anda telah membuat dan menambahkan kunci SSH awam anda sendiri ke akaun GitHub anda.

Pelaksanaan Python yang sangat sederhana dan naif untuk mencapai tugas yang kami jelaskan di atas adalah seperti yang ditunjukkan di bawah:

permintaan import
import os
 
# Mendapatkan input pengguna
unix_user = input ("Masukkan nama pengguna Unix anda:")
github_user = input ("Masukkan nama pengguna GitHub anda:")
 
# Memastikan .Direktori ssh ada dan membuka fail Author_keys
ssh_dir = '/ rumah /' + unix_user + '/.ssh / '
jika tidak os.jalan.ada (ssh_dir):
os.makedir (ssh_dir)
 
authority_keys_file = terbuka (ssh_dir + 'Author_keys', 'a')
 
# Menghantar permintaan ke API GiHub dan menyimpan respons dalam pemboleh ubah bernama'response '
api_root = "https: // api.github.com "
request_header = 'Terima': 'aplikasi / vnd.github.v3 + json '
tindak balas = permintaan.dapatkan (api_root + '/ users /' + github_user + '/ keys', header = request_header)
 
## Memproses tindak balas dan menambahkan kunci ke failkey_keys
untuk saya sebagai tindak balas.json ():
_kunci_fail yang dibenarkan.tulis (i ['kunci'] + '\ n')

Mari abaikan pengendalian fail Python dan perincian lain-lain dan perhatikan permintaan dan respons dengan teliti. Mula-mula kami mengimport permintaan permintaan modul permintaan perpustakaan ini membolehkan kami membuat panggilan API dengan sangat mudah. Perpustakaan ini juga merupakan salah satu contoh terbaik projek sumber terbuka yang dilakukan dengan betul. Inilah laman rasmi sekiranya anda ingin melihat lebih dekat mengenai dokumen tersebut.

Seterusnya kami menetapkan api_root pemboleh ubah.

api_root = "https: // api.github.com "

Ini adalah substring biasa di semua URL yang akan kami buat panggilan API. Jadi bukannya menaip “https: // api.github.com ”setiap kali kita perlu mengakses https: // api.github.com / pengguna atau https: // api.github.com / pengguna / kita hanya menulis api_root + '/ pengguna /' atau api_root + '/ pengguna /', seperti yang ditunjukkan dalam coretan kod.

Seterusnya, kami menetapkan tajuk dalam permintaan HTTPS kami, yang menunjukkan bahawa respons dimaksudkan untuk API versi 3 dan harus diformat JSON. GitHub akan menghormati maklumat tajuk ini.

1.  DAPATKAN Permintaan

Oleh kerana sekarang kami mempunyai maklumat URL dan (pilihan) header kami yang tersimpan dalam pemboleh ubah yang berbeza, inilah masanya untuk membuat permintaan.

tindak balas = permintaan.dapatkan (api_root + '/ users /' + github_user + '/ keys', header = request_header)

Permintaan itu adalah jenis 'get' kerana kami membaca maklumat yang tersedia secara terbuka dari GitHub. Sekiranya anda menulis sesuatu di bawah akaun pengguna GitHub anda akan menggunakan POST. Begitu juga kaedah lain yang dimaksudkan untuk fungsi lain seperti DELETE adalah untuk penghapusan sumber seperti repositori.

2.  Titik Akhir API

Titik akhir API yang kami jangkau adalah:

https: // api.github.com / pengguna // kunci

Setiap sumber GitHub mempunyai titik akhir API sendiri. Permintaan anda untuk GET, PUT, DELETE, dll kemudian dibuat terhadap titik akhir yang anda berikan. Bergantung pada tahap akses yang anda miliki, maka GitHub akan membenarkan anda meneruskan permintaan tersebut atau menolaknya.

Sebilangan besar organisasi dan pengguna di GitHub menetapkan sejumlah besar maklumat yang boleh dibaca dan umum. Sebagai contoh, akaun pengguna GitHub saya mempunyai beberapa repositori awam dan kunci SSH awam yang boleh diakses oleh sesiapa sahaja (walaupun tanpa akaun pengguna GitHub). Sekiranya anda ingin mempunyai kawalan akaun peribadi anda yang lebih terperinci, anda boleh menghasilkan "Token Akses Peribadi" untuk membaca dan menulis maklumat istimewa yang disimpan dalam akaun GitHub peribadi anda. Sekiranya anda menulis aplikasi pihak ketiga, yang dimaksudkan untuk digunakan oleh pengguna selain anda, maka Token OAuth dari pengguna tersebut adalah kehendak aplikasi anda.

Tetapi seperti yang anda lihat, banyak maklumat berguna dapat diakses tanpa membuat token.

3.  Tanggapan

Respons dikembalikan dari pelayan GitHub API dan disimpan dalam pemboleh ubah bernama respons. Keseluruhan respons dapat dibaca dengan beberapa cara seperti yang didokumentasikan di sini. Kami secara eksplisit meminta kandungan jenis JSON dari GitHub sehingga kami akan memproses permintaan itu, seolah-olah itu adalah JSON. Untuk melakukan ini, kita memanggil kaedah json () dari modul permintaan yang akan menyahkodnya menjadi objek asli Python seperti kamus dan senarai.

Anda dapat melihat kunci yang dilampirkan pada fail_kunci yang dibenarkan dalam ini untuk gelung:

untuk saya sebagai tindak balas.json ():
_kunci_fail yang dibenarkan.tulis (i ['kunci'] + '\ n')

Sekiranya anda mencetak jawapan.objek json (), anda akan melihat bahawa itu adalah senarai Python dengan kamus Python sebagai ahli. Setiap kamus mempunyai kunci bernama 'kunci' dengan kunci SSH awam anda sebagai nilai untuk kunci itu. Oleh itu, anda boleh menambahkan nilai-nilai ini satu persatu ke fail_kunci sah anda. Dan sekarang anda boleh memasukkan SSH ke pelayan anda dengan mudah dari komputer mana pun yang mempunyai kunci SSH peribadi yang sesuai dengan salah satu kunci awam yang baru saja kami tambahkan.

Meneroka Lebih Lanjut

Banyak kerja dengan API melibatkan pemeriksaan yang teliti terhadap dokumentasi API itu sendiri daripada menulis baris kod. Dalam kes GitHub, dokumentasi adalah salah satu yang terbaik di industri ini. Tetapi membaca dokumen API dan membuat panggilan API menggunakan Python agak tidak menarik sebagai aktiviti yang berdiri sendiri.

Sebelum anda melangkah lebih jauh, saya akan mengesyorkan anda melakukan satu tugas yang ingin anda laksanakan menggunakan Python di akaun GitHub anda. Kemudian cuba untuk melaksanakannya dengan hanya membaca dokumentasi rasmi yang disediakan oleh Python, perpustakaan bergantung dan GitHub. Ini juga akan membantu anda menerapkan pemikiran yang lebih sihat di mana anda memahami apa yang berlaku di dalam kod anda dan memperbaikinya secara beransur-ansur dari masa ke masa.

Cara membalikkan arah tatal Tetikus dan Pad Sentuh pada Windows 10
Tetikus dan Pad sentuhs bukan sahaja menjadikan pengkomputeran mudah, tetapi lebih cekap dan kurang memakan masa. Kami tidak dapat membayangkan kehidu...
Cara menukar saiz, warna & skema penunjuk dan kursor tetikus pada Windows 10
Penunjuk dan kursor tetikus di Windows 10 adalah aspek yang sangat penting dalam sistem operasi. Ini boleh dikatakan untuk sistem operasi lain juga, j...
Enjin Permainan Sumber Percuma dan Terbuka untuk Membangunkan Permainan Linux
Artikel ini akan merangkumi senarai enjin permainan sumber percuma dan terbuka yang dapat digunakan untuk mengembangkan permainan 2D dan 3D di Linux. ...