Git

Povezava z API-jem GitHub z uporabo Python 3

Povezava z API-jem GitHub z uporabo Python 3
GitHub kot spletna aplikacija je ogromen in zapleten subjekt. Premislite o vseh skladiščih, uporabnikih, vejah, zavezah, komentarjih, SSH ključih in aplikacijah drugih ponudnikov, ki so del tega. Poleg tega obstaja več načinov komunikacije z njim. Obstajajo namizne aplikacije za GitHub, razširitve za Visual Studio Code in Atom Editor, git cli, Android in iOS aplikacije.

Ljudje v GitHubu in zunanji razvijalci ne morejo upravljati vse te zapletenosti brez skupnega vmesnika. Ta skupni vmesnik imenujemo API GitHub. Vsak pripomoček GitHub, kot je cli, spletni uporabniški vmesnik itd., Uporablja ta skupni vmesnik za upravljanje virov (viri so entitete, kot so repozitoriji, ssh ključi itd.).

V tej vadnici se bomo naučili nekaj osnov o tem, kako se nekdo poveže z API-jem z uporabo GitHub API v3 in Python3. Najnovejši v4 API-ja GitHub zahteva, da se naučite o GraphQL-u, kar ima za posledico bolj strmo krivuljo učenja. Zato se bom držal samo različice tri, ki je še vedno aktivna in precej priljubljena.

Kako govoriti s spletnim API-jem

Spletni API-ji omogočajo uporabo vseh storitev, ki jih ponuja spletna aplikacija, na primer GitHub, programsko z uporabo jezika po vaši izbiri. Na primer, tukaj bomo uporabili Python za naš primer uporabe. Tehnično lahko z API-jem počnete vse, kar počnete na GitHubu, vendar se bomo omejili le na branje javno dostopnih informacij.

Vaš program Python bo z API-jem govoril na enak način, kot se brskalnik pogovarja s spletnim mestom. Se pravi, večinoma prek HTTPS zahtev. Te zahteve bodo vsebovale različne "dele", začenši z metodo zahteve [GET, POST, PUT, DELETE], samim URL-jem, nizom poizvedbe, glavo HTTP in telesom ali koristnim tovorom. Večina teh je neobvezna. Vendar bomo morali navesti način zahteve in URL, na katerega pošiljamo zahtevo.

Kaj so to in kako so predstavljeni v zahtevi HTTPS, bomo videli počasi, ko bomo začeli pisati skripte Python za interakcijo z GitHubom.

Primer

Dodajanje SSH ključev na novo ustvarjeni strežnik je vedno neroden postopek. Napišimo skript Python, ki bo iz GitHub-a pridobil vaše javne SSH-ključe in jih dodal v datoteko pooblaščeni-ključi na katerem koli strežniku Linux ali Unix, kjer zaženete ta skript. Če ne veste, kako ustvariti ali uporabiti SSH ključe, je tu odličen članek, kako to storiti. Predvidevam, da ste ustvarili in dodali svoje javne SSH ključe v svoj račun GitHub.

Zelo preprosta in naivna izvedba Pythona za dosego zgoraj opisane naloge je prikazana spodaj:

zahteve za uvoz
uvoz os
 
# Pridobivanje uporabniškega vnosa
unix_user = input ("Vnesite svoje uporabniško ime Unix:")
github_user = input ("Vnesite svoje uporabniško ime za GitHub:")
 
# Prepričati se .ssh obstaja in odpira datoteko pooblaščenih ključev
ssh_dir = '/ home /' + unix_user + '/.ssh / '
če ne os.pot.obstaja (ssh_dir):
os.makedirji (ssh_dir)
 
pooblaščene_keje_datoteke = odprto (ssh_dir + 'pooblaščene_ključke', 'a')
 
# Pošiljanje zahteve v GiHub API in shranjevanje odgovora v spremenljivko z imenom 'response'
api_root = "https: // api.github.com "
request_header = 'Sprejmi': 'application / vnd.github.v3 + json '
odgovor = zahteve.get (api_root + '/ users /' + github_user + '/ keys', headers = request_header)
 
## Obdelava odziva in dodajanje ključev datoteki pooblaščeni_keji
za i v odgovor.json ():
datoteka_ pooblaščenih_ključkov.piši (i ['tipka'] + '\ n')

Zanemarimo obdelavo datotek Python in različne podrobnosti ter natančno preučimo zahtevo in odgovor. Najprej smo uvozili zahteve za uvoz modulov zahtev, ta knjižnica nam omogoča zelo enostavno klicanje API-jev. Ta knjižnica je tudi eden najboljših primerov odprtokodnega projekta, narejenega pravilno. Tu je uradno spletno mesto, če želite podrobneje preučiti dokumente.

Nato nastavimo spremenljivko api_root.

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

To je skupni podniz v vseh URL-jih, na katere bomo izvajali klice API. Namesto da vtipkate »https: // api.github.com «vsakič, ko moramo dostopati do https: // api.github.com / users ali https: // api.github.com / uporabniki / samo pišemo api_root + '/ users /' ali api_root + '/ users /", kot je prikazano v delčku kode.

Nato smo v zahtevi HTTPS nastavili glavo, kar pomeni, da so odgovori namenjeni API-ju različice 3 in naj bodo oblikovani v obliki JSON. GitHub bi spoštoval te informacije v glavi.

1.  PRIDOBI zahtevo

Zdaj, ko imamo svoj URL in (neobvezno) informacije v glavi shranjene v različnih spremenljivkah, je čas, da vložimo zahtevo.

odgovor = zahteve.get (api_root + '/ users /' + github_user + '/ keys', headers = request_header)

Zahteva je vrste 'get', ker beremo javno dostopne informacije iz GitHub-a. Če bi pisali nekaj pod svojim uporabniškim računom GitHub, bi uporabili POST. Podobno so druge metode namenjene tudi drugim funkcijam, kot je DELETE za brisanje virov, kot so skladišča.

2.  Končna točka API

Končna točka API, po kateri se trudimo, je:

https: // api.github.com / uporabniki // tipke

Vsak vir GitHub ima svojo končno točko API. Nato se vaše zahteve za GET, PUT, DELETE itd. Pošljejo glede na končno točko, ki ste jo navedli. Odvisno od stopnje dostopa, ki jo imate, vam bo GitHub nato dovolil, da s to zahtevo nadaljujete ali jo zavrnete.

Večina organizacij in uporabnikov v GitHubu postavi ogromno informacij, berljivih in javnih. Moj uporabniški račun GitHub ima na primer nekaj javnih skladišč in javnih SSH ključev, do katerih lahko vsakdo dostopa (tudi brez uporabniškega računa GitHub). Če želite imeti bolj natančen nadzor nad svojim osebnim računom, lahko ustvarite “Personal Access Token” za branje in pisanje privilegiranih podatkov, shranjenih v vašem osebnem računu GitHub. Če pišete aplikacijo tretje osebe, ki naj bi jo uporabljali drugi uporabniki, potem je za vašo aplikacijo potreben žeton OAuth navedenega uporabnika.

A kot vidite, je do veliko koristnih informacij mogoče dostopati brez ustvarjanja žetona.

3.  Odziv

Odgovor se vrne s strežnika API GitHub in se shrani v spremenljivko z imenom response. Celoten odgovor je bilo mogoče prebrati na več načinov, kot je tukaj dokumentirano. Izrecno smo zahtevali vsebino tipa JSON iz GitHub, zato bomo zahtevo obdelali, kot da je JSON. Za to iz modula za zahteve pokličemo metodo json (), ki jo bo dešifrirala v domače predmete Pythona, kot so slovarji in seznami.

V tej zanki for si lahko ogledate tipke, ki so priložene datoteki pooblaščeni ključi:

za i v odgovor.json ():
datoteka_ pooblaščenih_ključkov.piši (i ['tipka'] + '\ n')

Če natisnete odgovor.json (), boste opazili, da gre za seznam Python s slovarji Python kot člani. Vsak slovar ima ključ z imenom 'ključ' z vašim javnim ključem SSH kot vrednost tega ključa. Torej lahko te vrednosti dodate eno za drugo v svojo datoteko pooblaščeni_keji. Zdaj lahko v strežnik enostavno vstavite SSH iz katerega koli računalnika, ki ima katerega koli od zasebnih ključev SSH, ki ustreza enemu od javnih ključev, ki smo jih pravkar dodali.

Raziskovanje naprej

Veliko dela z API-ji bolj kot pisanje vrstic kode vključuje natančen pregled same dokumentacije API. V primeru GitHub je dokumentacija ena najboljših v panogi. Toda branje dokumentov API in izvajanje klicev API s pomočjo Pythona je kot samostojna dejavnost precej nezanimivo.

Preden nadaljujete, vam priporočam, da pripravite eno nalogo, ki bi jo želeli izvesti z uporabo Pythona v svojem računu GitHub. Nato ga poskusite izvesti tako, da preberete samo uradne dokumente Pythona, njegovih odvisnih knjižnic in GitHub. To vam bo pomagalo tudi pri sprejemanju bolj zdrave miselnosti, kjer boste razumeli, kaj se dogaja v vaši kodi, in jo sčasoma postopoma izboljšali.

Najboljše aplikacije za preslikavo gamepadov za Linux
Če želite igre na Linuxu igrati z igralno ploščico namesto s tipičnim sistemom za vnos tipkovnice in miške, je za vas na voljo nekaj uporabnih aplikac...
Uporabna orodja za igralce Linux
Če radi igrate igre na Linuxu, obstaja verjetnost, da ste za izboljšanje igralne izkušnje uporabljali aplikacije in pripomočke, kot so Wine, Lutris in...
HD Remastered Games za Linux, ki prej še niso izdale Linuxa
Mnogi razvijalci iger in založniki pripravijo HD remaster starih iger, da podaljšajo življenjsko dobo franšize, zato oboževalci zahtevajo združljivost...