[Powered by Google Translate] [Seminar] [A programmeringsruten Introduksjon til APIer] [Billy Janitsch] [Harvard University] [Tommy MacWilliam] [Dette er CS50.] [CS50.TV] Hei, alle sammen, jeg er Billy, og i dag skal jeg snakke om APIer, eller programmeringsgrensesnitt, spesielt i sammenheng med CS50 endelige prosjekter og den slags ting. Generelt hva som er en API? I svært grove trekk er det liksom en middelaldrende mann som lar 2 stk av programvare for å kommunisere med hverandre. Det er en slags svært vid definisjon, og er ikke så relevant for det vi ser på. Hva vi egentlig ønsker er en slags nyttige middelvei å kommunisere med en slags database et sted. Her er et diagram, og i utgangspunktet ideen er at vi er et program, og vi ønsker å få data fra en database, men vi ønsker ikke å søke i databasen direkte. I stedet ønsker vi å gå gjennom denne typen midt mann, API. Tanken bak det er nummer 2 og 3 på tabellen begge kommer til å være svært komplisert og rotete. Med andre ord, når API er spørre databasen, er det sannsynligvis kommer til å bruke SQL-tabeller og alle den slags ting, og vi har lært litt om det i CS50, men samlet, du har lagt merke til at det er litt av en smerte. Det blir veldig, veldig komplisert og rotete, spesielt når du gjør komplekse spørringer og den slags ting. Hva vi egentlig ønsker er en slags nyttige og enkel måte å få disse dataene, og det er tanken bak tallene 1 og 4 på kartet. Med andre ord, ønsker vi en veldig enkel måte å fortelle API hva du får for oss og en veldig enkel måte å få disse dataene tilbake. Det er en viktigste måten at data skal sendes og mottas, som er JSON, eller JavaScript Object Notation. Som kan variere litt så langt som hvordan du sender forespørsel til API. Med andre ord, hvis du ønsker noen viss mengde data, hvordan du fortelle API for å få disse dataene kan variere litt. Vanligvis er det innebærer å gjøre noen form for nettverk forespørsel. Med andre ord, tilgang slags URL som kommer til å fortelle API akkurat hva du vil, men dataene er nesten alltid sendes tilbake, med andre ord, nummer 4 i JSON. Hva er JSON egentlig? Som jeg sa, JavaScript Object Notation. Det er i utgangspunktet den universelle standarden for overføring og mottak av data. Ideen er at du har disse tre kategorier av ting. Du har arrays, hashmaps og primitiver. Matriser og hashmaps du har sett på litt i CS50, men du har liksom fått en meget streng følelse av hva de er. Med andre ord, med arrays vet du at de er skrive bundet, slik at du bare har en slags type som går gjennom hele matrisen. JSON er mye mer skånsom med den slags ting. I utgangspunktet ideen er du konstruere dette objektet, som kan være sammensatt av hvilken som helst av disse 3 ting og kan være sammensatt av flere seg av dem, og de kan settes inn i hverandre. Her er liksom et eksempel på JSON, som er disse klammeparentesene her representerer din HashMap, og en HashMap er i utgangspunktet en kartlegging av noen form for nøkkel til noen slags verdi. Du vil se her at vi har egenskaper nøkkelen, og det er kartlegging på en matrise, som er hele greia. Vi ser en annen del av HashMap, som er denne nøkkelen isAwesome, som kart til en primitiv verdi av ekte, med andre ord, en boolsk. Primitiv kan være strenger. De kan være hele tall. De kan være bools, noe sånt. Og du se innholdet i denne matrisen som eiendommer poeng til har 2 strenger i den, self-lignende og fantastisk. De er to egenskaper JSON, og vi ser at JSON er kjempebra. For å se på det litt nærmere jeg kommer til å konstruere en mer komplisert eksempel av JSON her. La oss starte med en matrise, for eksempel bare en tom matrise. Men det er liksom kjedelig, så vi kommer til å fylle den opp litt, og som jeg sa, er arrays i JSON skriver bundet, slik at vi kunne også ha en streng her, som er hi, og det er en annen del av denne matrisen. Likeså kan vi legge en hashmapping her, som kommer til å ha noen kartlegginger. Det kommer til å ha en kartlegging fra navn til strengen Billy. Vi har en kartlegging fra navn til Billy, og vi har en kartlegging av favorittfarge til blå. Det er i utgangspunktet et godt eksempel på JSON. Den slags kommer inn-whoops, trenger et komma der-alle de forskjellige deler av den. Igjen, det er ikke skrive bundet i det hele tatt, slik at du kan ha noen slags typer inne noe du ønsker, og ideen er at det er self-lignende. Med andre ord, dette er rett her en JSON objekt, som er hele greia, som er nettopp dette, slik at du kan ha en primitiv være et objekt, en matrise være et objekt eller en HashMap være et objekt. Som du kan slags se, er JSON virkelig, virkelig nyttig i at det er så allsidig. Du kan ha alle mulige data som du kan tenke lagret i JSON. Det gjør det en veldig fin språk som skal brukes med APIer fordi det ganske mye betyr at uansett hvilke data du vil det kommer til å være noen måte å få den tilbake i JSON. Noen egenskaper som gjør JSON spesielt bra for denne typen ting. Som du kan se, i forhold til en masse ting som du har jobbet med i CS50 Det er forholdsvis lett å lese og også svært enkelt å skrive. Du kan rykke ut hvis du vil, som jeg gjorde i dette eksempelet, som gir deg en fin, pen versjon som du kan se veldig bra. Men dessuten er det også lett å lese og skrive for en datamaskin. Med andre ord, er det lett å analysere og lett å kode, noe som betyr at det er ganske fort så langt som å lese data er opptatt, og JSON kan genereres veldig raskt. Det er også svært enkelt å få tilgang til ulike deler av JSON og den slags ting. Det er fint, og dessuten det faktum at det er selvbetjent lignende, med andre ord, det faktum at du kan ha JSON innen JSON innen JSON er veldig hyggelig for lagring av data. En annen del som er generelt veldig nyttig i arbeidet med APIer er jQuery. Du har lært litt av JavaScript, som er en fin måte å manipulere HTML og CSS i et nettsted. Men det kan slags være smertefullt å kode i ren JavaScript, hovedsakelig fordi JavaScript er en virkelig detaljert språk. Du må lære mye av syntaks, og bare for å gjøre veldig enkle ting det tar mye av koden, så jQuery er et bibliotek for JavaScript. Med andre ord, det er en JavaScript-fil som du kan laste og deretter bruke jQuery funksjoner for å gjøre visse ting. Og jQuery gjør i utgangspunktet livet mye enklere. Det forenkler hva ville ta hundrevis av linjer i JavaScript ned til noen få linjer i jQuery. Det er spesielt nyttig hvis du bruker APIer fordi generelt hvordan du skal få tilgang til API er ved å gjøre AJAX forespørsler, og jeg tror David har nevnt i foredraget at AJAX forespørsler er generelt når du gjør en forespørsel til noen slags server og komme tilbake en slags data og oppdatere en side umiddelbart. Mens i vanlig JavaScript som ville ta gale antall linjer å validere alle overskrifter og gjøre alt av den slags ting, jQuery har en veldig enkel funksjon kalt AJAX, og alt du trenger å gjøre i AJAX er å gi parameterne som du ønsker å gi API, plasseringen av API og ytterligere slags alternativer som du ønsker å konfigurere. Det er veldig, veldig hyggelig og veldig nyttig for denne typen ting. Det er alt vi trenger for å begynne å få våre hender skitne i APIer. Jeg kommer til å ta opp noen eksempler og utforske sine ulike egenskaper og hvorfor de er nyttige for ulike typer ting. Det første jeg vil faktisk vise deg er noe som jeg jobber med på min forskningslaboratorium, som er en Ngram Viewer, og i utgangspunktet ideen om en Ngram Viewer er at du kan søke etter en slags ord eller uttrykk og se hvor ofte det dukket opp i et bestemt sett av tekst over tid. Dette eksempelet her er dette datasettet av babyer som ble født i New York mellom 1920 og 2000. Vi kan søke, for eksempel, for navnet Jennifer, og vi ser at pre-1960 det virkelig var ikke brukt så mye, og deretter som vi får inn de senere år er det blitt brukt mer og mer. Vi kan også gjøre sammenligninger, så hvis vi sammenligner Jennifer til, for eksempel, Thomas, Vi kan se Thomas har vært ganske utbredt gjennom historien, mens Jennifer er en nyere navn. Vi kan gjøre den slags ting. Hvordan fungerer dette programmet fungerer? I utgangspunktet, det fungerer via en API. Med andre ord, har vi visse parametre her. Vi har parameterne hva vi faktisk søker etter, som er disse navnene, og så har vi et par andre egenskaper, som y-aksen og X-aksen. Du kan se vi har et par forskjellige alternativer så langt som tidsoppløsning å bruke og den slags ting. Vi har disse alternativene så langt som hva data vi faktisk ønsker fra databasen, og vi ønsker å få disse dataene tilbake på noen hensiktsmessig måte. Vanligvis hvis vi spørre databasen direkte det ville liksom være en smerte å gjøre fordi antagelig disse dataene om baby navn bor i noen database sted, og det ville være veldig komplisert å måtte spørre det manuelt og bestemme nøyaktig hvilke data som skal tilbake. Med andre ord, vi bare bryr seg om Jennifer og Thomas i dette tilfellet, og vi bare bryr seg om på en bestemt akse og alle den slags ting. Hvordan kommer vi oss rundt dette? Å grave i dette API litt mer jeg vil vise deg et annet eksempel på denne plattformen som bruker en litt annen datasett. Dette datasettet, i stedet for å være baby navn, er faktisk bare hele trykt publikasjon database av Open Library, som er en gigantisk kilde tekster publisert gjennom de siste 100 år eller så. Ideen er at vi har denne compository av millioner av tekst, som vi kan nå søke etter ulike ord og uttrykk i. Her er et eksempel som varierer litt annerledes fra forrige eksempel Jeg viste deg, som er at vi har disse tre søk, krig, krig og det franske ordet for krig, som er Guerre. Og vi søker innen 3 forskjellige deler av den totale databasen. Med andre ord, i denne første spørringen vi bare søker i USA, i den andre bare i Storbritannia, og den tredje bare fra verk utgitt i Frankrike. Vi ser frem noen interessante mønstre. For eksempel ser vi rett rundt her som- oops, jeg messed opp aksen litt, men du kan se rett i dette området her rundt borgerkrigen er det en stor økning i den amerikanske utgaven men ikke en så stor økning i de to andre, og det er åpenbart fordi den amerikanske borgerkrigen foregikk på det tidspunktet. Vi kan se noen kule ting der, men hva vi virkelig bryr seg om er hvordan vi fikk disse dataene. Jeg tar deg med bak kulissene i dette programmet i en liten bit. En ryddig trikset er hvis du arbeider med området og hva slags ønsker å vite hva som skjer bak kulissene, kan du åpne opp utviklerverktøy. Jeg kommer til å bruke Chrome utviklerverktøy, og å komme til dem du kan gjøre kontroll, shift, J, og som tar deg til JavaScript-konsoll. Det er noen få faner her. De kan alle være ganske nyttig under forskjellige omstendigheter, men jeg bryr meg om nettverket Kategorien akkurat nå, og jeg har faktisk å oppdatere for å få den fungerer. Oh, beklager. Det liker å gi en tilfeldig eksempel. Ok, vil vi bruke dette eksemplet i stedet da. Ideen er at det er dette API her, og du kan se nøyaktig hva API er tilbake. Dette er hva programmet er å komme tilbake fra API ha sendt forespørselen. La meg zoome inn litt, og vi kan i utgangspunktet se det er bare en serie av viktige verdi par i JSON. Med andre ord, har vi denne HashMap her som er kartlegging verdier. Med andre ord, er det kartlegging år til verdier. I 1765 hvilket ord vi opprinnelig søkte etter er brukt 90 ganger av 1 million, så vi får tilbake dette resultatet. Det er ikke akkurat JSON siden vi har denne lille resultatet header her, men ser at dette hele objektet her er bare en stor stor JSON blob. Vi har en matrise her som inneholder dette hele elementet, og du kan se at hele elementet slutter der, og så har vi en annen stor element som går hele veien ned til enden, og som ender her. Vi har en veldig stor matrise med to objekter i den, og hver av disse objektene er HashMap. Du kan se innenfor hver av disse hashmaps vi har en kartlegging av denne indeksen verdien til 0 og denne verdien verdi til en annen HashMap, som igjen er kartlegging x-aksen verdier til Y-aksen verdier. Du kan se JSON blir litt komplisert, men samlet, det er faktisk veldig nyttig, og det er veldig enkelt å få tilgang i forhold til andre ulike former for notasjon. Så langt som hva vi faktisk sender data til API for å få, Jeg kommer til å gå inn i bakenden litt her. Dette er den store JavaScript-fil som er håndtering av alle interaksjoner på web app, og slik at vi ikke bryr oss om det meste av dette, men vi bryr oss om noe av det. For eksempel, vi bryr oss om dette buildQuery funksjonen, og ideen om denne funksjonen er i utgangspunktet det ser rundt på siden, finne ut hva brukeren ønsker å spørre, med andre ord, sjekke disse boksene der de har innspill sine søkeord, sjekke de forskjellige Y og x-aksen verdier som de har valgt, og alle slike ting, og det kommer til å spytte ut dette søket verdi, som jeg kan da sende ut til API. Dette ser komplisert ut, og det er ganske komplisert men hva jeg skal gjøre-faktisk, jeg allerede gjør dette, som er stor- er at jeg kommer til å få konsollen til å skrive ut akkurat det spørringsverdien at det er å sende av gårde til API. Det er faktisk akkurat her. Beklager, utganger det en masse ting. Men dette er hva vi bryr oss om, dette objektet her. Dette er den Søkeobjektet. Med andre ord, dette er akkurat hva nettet program sender til API, og så la oss se inne i en liten bit, og vi ser at vi noen verdier her. Vi ser at vi dette telle type, som er forekomster per million ord, som er nøyaktig hva vi har valgt i Y-aksen over her. Det er der det kommer fra. Vi har en database verdi, noe som betyr at det er noen bestemt database at disse dataene er å leve i, og vi ønsker å få tilgang til data spesifikt i motsetning til de baby data, for eksempel. Så har vi dette grupper verdi, som sier at vi vil søke etter år i motsetning til andre X-aksen verdi. Da har vi en metode, som noen APIer vil gjøre flere ting. Med andre ord, kan dette API også returnere andre typer data, men i dette tilfellet, vil vi at kartlegging av X-aksen til Y-verdier akseverdiene. Det er det som er å fortelle det å gjøre det, og vi har dette søket grenser array, som inneholder to verdier. Den første er det vi ser her, er som alle verdiene inneholdt i den første lille boksen på toppen. Med andre ord, ønsker vi å se etter ordet kamp, ​​og vi ønsker å filtrere det av engelske tekster innenfor amerikansk litteratur. Vi har dette landet, som er USA. Vi har et språk, som er engelsk, så har vi alle disse forskjellige delene som alle forteller API nøyaktig hva vi ønsker. Vi vet ikke hva de data som vi får tilbake er ennå, men vi vet at dataene kommer til å ta en viss form. Dette eksemplet er liksom på det kompliserte side, og du ville ikke nødvendigvis være å bruke en API dette komplekset, men dette er å vise deg området og makt over hva APIer kan gjøre. Med andre ord, ved hjelp av en relativt enkel spørring systemet i utgangspunktet har vi en inndataboks med noen andre velgere på forskjellige steder. La meg zoome ut igjen her. Vi har en tekstboks med et par forskjellige metadata valg, og vi har Y-aksen og x-aksen valg. Vi trenger faktisk ikke har så mange felt, og vi kan se veldig lett vi er i stand til å spørre noen form for API og få data tilbake og deretter sette det inn i denne figuren, som deretter skal vise det på en nyttig måte. For å se på et annet eksempel som kan være litt mer kjent med dere vi kommer til å slå til Facebook. Facebooks API kalles Facebook Graph, og i utgangspunktet hva det betyr er Facebook ser på seg selv som denne massive database av mange forskjellige deler som alle har visse relasjoner til hverandre. Med andre ord, jeg er en bruker på Facebook, så har jeg en profil, og jeg har også visse venner, og hver av dem har en profil, og hver av mine venner har en vegg, som har forskjellige kommentarer på det, og hver av disse kommentarene har liker og alt av den slags ting. Det er mange forskjellige deler til Facebook. Det er et enormt kompleks API, og det er tonnevis du kan gjøre med det, men det er faktisk ganske enkel å bruke. Jeg kommer til å starte ut ved å gå til graph.facebook.com / billyjanitsch, som er min unike kontonavn, og kontonavnet vil enten være en slags ord hvis du har valgt det, eller det kan bare være en streng av tall. Det vi får tilbake er ganske grunnleggende informasjon. Vi ser at jeg har et fornavn som er Billy, et etternavn, som er Janitsch. Det er en unik Facebook ID som jeg har. Du kan se at jeg er mann, og at jeg har min språkinnstilling til britisk engelsk. Med andre ord, ser vi svært grunnleggende informasjon her. Det er ikke for mye, men det gir oss en idé om hva som er der. Vi kan gjøre det samme til David Malan, for eksempel. Jeg tror han heter dmalan. Vi ser David Malan har en unik ID. Han har et navn, fornavn, mellomnavn, etternavn. Vi ser også at han er mann og har språket hans satt til amerikansk engelsk. Med andre ord, ser vi ganske grunnleggende informasjon her. Nå, hva skjer hvis vi prøver å sjekke ut noe annet? La oss si jeg er interessert i hva David Malan har likt på Facebook. Jeg kan gjøre / liker. Nå har vi kjørt inn i et problem. Vi har fått noen form for feil som sier en tilgang er nødvendig for å be om denne ressursen. Men hvis du tenker på det, gjør det faktisk fornuftig fordi det ville være rart hvis du kunne få tilgang til hver enkelt del av Facebooks database bare fra en slags enkel API, ikke sant? Med andre ord, formodentlig informasjonen ikke kan nås av alle som ønsker det. Denne feilen er nettopp hva det betyr. Noen APIer krever visse tillatelser for å få tilgang til sine data. Og enda mer avanserte APIer, som Facebook en, vil kreve visse tillatelser til å gjøre visse ting. Jeg kan se dette grunnleggende informasjon om David Malan. Jeg kan se at han er mann, og at han bor i USA, men jeg kan egentlig ikke se noe forbi dette. For å komme rundt dette for nå har Facebook denne fint verktøy som er grafen API explorer, og ideen om det er du kan liksom utgjør tillatelser for deg selv basert på din egen konto og deretter se ting som spesifikt kontoen kan vise. For eksempel, hvis jeg gjør graph.facebook.com/billyjanitsch/likes- whoops, antar jeg at jeg har for å forlenge min token her. Okay. Hvis jeg gjør det igjen, stor, nå ser jeg at jeg får dette objektet tilbake som sier at jeg liker bassenget nudler, som er i kategorien spill og leker. Jeg liker hvalross, som er i kategorien Animal. Dette er min faktiske Facebook liker. De er slags pinlig. Men vi kan se disse dataene er alle tilbake i JSON. Det er ganske lesbar. Med andre ord, har vi denne kartleggingen av data til en slags en matrise, og hvert element i denne matrise er en HashMap som kartlegger navnet på en lignende og kategorien av en slik. Hver som har en unik ID. Det er alle slags forskjellige ting av data som vi kan få, og hvis du er interessert i å bruke Facebook API for en CS50 avsluttende prosjekt eller for noe sånt det er faktisk ganske gjennomførbart. I utgangspunktet hvordan du får rundt godkjenning ting er Facebook bruker et system kalt OAuth eller Åpne autentisering, og jeg ønsker ikke å komme inn i det nå fordi OAuth eller annen type av godkjenning tendens til å variere mye mellom ulike APIer, så jeg kunne bruke lang tid å gå over hver enkelt, men de er faktisk ganske selvforklarende. Hvis du Google Facebook API det er svært lesbare. Det er en hel spec. For eksempel er dette dokumentasjonen for Facebook API, og du kan se jeg er på bruker, slik at jeg kan lære alt om de forskjellige ting som er tilgjengelig for å komme så langt som data og også de ulike tillatelser som jeg trenger for å få tilgang til dem. Som vi så, trenger vi ikke tillatelse til å få tilgang til navn eller kjønn, men utover at vi trenger tillatelser for de fleste ting. Denne siden, eller rettere sagt, denne nettsiden vil også fortelle deg hvordan du får en token å kunne godkjenne deg selv. De fleste autentiseringssystemer bruke noen form for token hvor du får denne unike verdi, som er en veldig lang og tilfeldig streng, og på den måten de kan knytte anmodning om at du gjør med deg. Med andre ord, de vet at du ikke gjør noe mistenkelig med sine data. De vet nøyaktig hva du får. De vet også at du har tillatelse til å vise denne informasjonen. Hvis du har laget en Facebook-applikasjonen og programmet ditt har visse brukere, og disse brukerne har lov som app tilgang til visse deler av profilen sin, så hva API nøkkel eller tegn på at det app bruker vil kunne få tilgang til dataene for disse brukerne. Dette kan høres komplisert ut, men det er ikke så ille, og hvis du ønsker å bruke Facebook Jeg vil anbefale at du vurdere å spille rundt med API deres. Det er veldig kult, og du kan gjøre en masse forskjellige ting med den. Hvis brukeren gir deg disse tillatelsene du kan selv gå tilbake til API og si jeg vil faktisk legge til denne brukerens vegg, eller ønsker jeg å ha dem legge inn et bilde, og det er derfor på nyhetsfeed vil du noen ganger får disse irriterende tingene si din venn har sett denne videoen på en slags rare nettstedet eller noe sånt. Det er fordi at programmet har fått tilgang til å legge på vedkommendes vegg. Ideen samlet, er Facebook API ganske komplisert, men også veldig nyttig. Definitivt verdt å sjekke ut hvis du fortsatt leter etter et avsluttende prosjekt. En annen suite med APIer som jeg kommer til å gå over er CS50 APIer. La meg zoome inn her. CS50 har satt faktisk sammen en hel serie av APIer som du kan bruke for et avsluttende prosjekt eller bare for noe som du gjør. Og de er stort sett Harvard relatert, og de varierer fra HUDS menyen, for eksempel til dette Harvard Hendelser API, som vil la deg få tilgang til en liste over forskjellige hendelser som skjer ved Harvard og den slags ting. Og så kan vi klikke på ett av disse og få en spec for det, som du vil være i stand til å finne for enhver API, og ideen er det gjør at du vet, A, spesifikt hva å be fra API og hvordan du ber om det. Med andre ord, hvis jeg vil at alle hendelser som skjer i morgen da har jeg fått til åpenbart gi den nevnte dag at jeg vil ha i et bestemt format, og B, vil den fortelle meg nøyaktig hva det kommer til å gi tilbake til meg. Det vil si at jeg kommer til å returnere deg denne JSON objekt, eller som du kan se, er det forskjellige formater. Du kan også returnere dataene som CSV, for eksempel. Men du vet nøyaktig hvordan dataene kommer til å se når du får den tilbake slik at du kan forvente å gjøre visse ting med det. Vi kan bla nedover og se, for eksempel hvis vi ønsker å spørre API å få en kalender, så vi kan bruke denne URL og gi den enkelte parametre som kommer til å være data som vi ønsker akkurat. Og på samme måte, hvis vi ønsker dataene tilbake i et bestemt format, så kan vi be den skal sende data i en CSV, og det er bare en annen parameter som vi passerer til API. Massevis av kule ting å gjøre der. Jeg vil absolutt anbefale å sjekke ut CS50 APIer. Jeg kommer til å se på dette Harvard Food API spesielt for en liten bit. En ting jeg har faktisk laget er dette Harvard Noms nettside, som bruker CS50 Food API for å hente HUDS menyen for dagen. Og for forlengelse skolen mennesker, er HUDS dining service på Harvard. Hva du får er denne siden som inneholder alle måltider for dagen, så vi ser lunsj. Vi har et par forskjellige kategorier. Vi har bønne og hele korn stasjon. Vi har brun ris stasjon. Vi kan se for brunsj vi har disse få matvarer. Hvis vi klikker på dem, så vi får informasjon om ernæring. Du ser dette er ernæring informasjon for grapefrukt, i tilfelle du skulle lure på. Og så igjen, vi kommer til å kikke inn i bakenden her litt og se hva dette gjør for å få disse dataene. Og det viser seg å faktisk ikke være veldig komplisert i det hele tatt. Denne filen ser litt rotete, men husk at dette er håndtering av hele nettstedet, og hvis jeg ruller nedover ser vi denne endringen data funksjonen. Nå, bare for å være klar, dette er skrevet i CoffeeScript, som er et språk som du sannsynligvis ikke har sett før. Men det er ganske lesbar, så jeg skal gå gjennom det som om det var pseudokode. Endre datoen er en funksjon som kommer til å ta i denne datoen verdi, og det er også kommer til å ta i et første, som vi ikke bryr oss om så mye. Men det viktigste er at den har denne datoen, og at datoen er dagen som vi ønsker å be alle matvarer for. Og så ser vi en liten bit av syntaks her, som er utgangspunktet analyse denne datoen til et lesbart format. Med andre ord krever API datoen i et bestemt format. Du kan ikke bare si 16 november 2012 AD. Det vil ikke vite hva jeg skal gjøre med det. Det ønsker datoen i et bestemt format. Alt vi gjør her er å gi det akkurat det formatet, som er et år verdi og deretter en bindestrek, en måned verdi, en annen bindestrek og datoen verdi. Og vi har også si at vi ønsker dataene skal sendes ut i JSON. Nå vi gjør dette AJAX forespørsel, og som jeg nevnte tidligere, jQuery har denne super nyttige AJAX-funksjon som alt du trenger å gjøre er å spesifisere noen parametere her nede, og det vil gi deg akkurat det du ønsker. Vi forteller det at nettadressen vi ønsker at den skal gå til, er dette CS50 Mat API, som vi fikk fra spec. Vi sier at vi ønsker dataene i JSON og at vi kommer til å gi den disse dataene som vi har definert her oppe. Dette er dagen vi ønsker matvarer for. Og så alt vi trenger å gjøre er å definere en slags suksess funksjon, som er utgangspunktet hva som skjer når API returnerer dataene. Med andre ord, vi har pakket opp alle parameterne som vi ønsker, som i dette tilfellet er den dagen vi ønsker det og det faktum at vi vil ha det i JSON, og vi sendte det av gårde til API, så nå API sier, ok, her er dine data, fikk jeg den tilbake til deg. Vi har suksessen funksjonen, noe som betyr gitt at API hell returnerer noen data, hva gjør vi med det? Og det viser seg at alt vi gjør er å ringe denne oppdateringen menyfunksjonen med uansett API har returnert, slik at vi kan søke etter det og se at alt vi gjør er å bruke en haug med nye syntaksen her å oppdatere HTML og sett disse nye dataene. Hva dette gjør er at vi har disse pilene på hver side, og vi kan klikke, og nå ser vi på data for neste dag og igjen for neste dag, og hver gang det har å oppdatere denne datoen verdi og spørring API, komme tilbake noen data og sette det inn i området. Igjen, kan du se, super, super nyttig. Denne app tok meg et par timer å hacke sammen, og jeg har litt mer erfaring, selvsagt, men CS50 avsluttende prosjekt kan se noe veldig mye som dette. Programmeringsgrensesnitt er super kraftig for hvor mye krefter som de tar. Det siste jeg kommer til å gå over er noen flere APIer bredt. Jeg vil ikke komme så langt inn i dem så langt som hva de gjør konkret, men jeg vil gi deg en idé om hva som er der ute. 2 virkelig nyttige seg, hvis du er interessert i data analyse eller visualisering eller noe sånt, er Freebase og Wikipedia. Wikipedia-antagelig dere alle vet, er et gratis online leksikon, og det har faktisk en API, så hvis du vil, for eksempel, få alle tekstene og artikler for blekksprut du kan veldig enkelt gjøre det. Bare si hei, Wikipedia API, vil jeg gjerne dataene som returneres som dette, og jeg vil ha den i dette formatet, og artikkelen jeg ønsker er blekksprut, og svært raskt det vil gi deg tilbake den informasjonen. Det kan være veldig nyttig hvis du ønsker å gjøre noen form for nettstedet det er en bedre visningsprogram for Wikipedia eller noe sånt. Freebase er liksom lik, selv om det er litt vanskeligere så langt som API. Freebase er som Wikipedia i at det er en online leksikon som inneholder mange og massevis av ulike data om alle slags forskjellige temaer, men den er lagret i en relasjonsdatabase, som er litt forskjellig fra Wikipedia. Wikipedia har sine artikler og artikler knyttet til andre artikler, men for det meste, hvis du vil at dataene for blekksprut, du går til blekksprut artikkelen får disse dataene, og du har en haug med tekst om blekkspruter, så det er flott. Freebase fungerer på en litt mer komplisert måte i det alt er relatert til hverandre. Med andre ord, hvis vi leter etter blekksprut da den har en haug med kategorier knyttet til den. For eksempel er det et dyr, lever den under vann, den har en viss kroppstemperatur. Jeg vet ikke. Og alle disse kategoriene er lenker til andre steder hvor du kan gå å se ting med det samme kategori. Med andre ord, ville blekksprut datasettet inneholder en kobling til datasettet for alle dyr, og som ville la meg flytte rundt i databasen veldig raskt. Dette kan være svært nyttig hvis du gjør noe sånt sammenligninger. Med andre ord, gitt en bestemt ting, vil du se hva annet det er relatert til og se hva annet det ikke er relatert til. Den slags ting. Det kan være nyttig i en rekke måter. Hvis du leter etter mer av en utfordring, og å være i stand til å gjøre noen mer komplekse ting Jeg ville vurdere å ta en titt på Freebase API. Men i stor grad er Wikipedia et veldig enkelt sted å gå så langt som å få informasjon. Et annet sted som jeg vil se på er Last.fm, og jeg faktisk kommer til å gå til nettstedet i tilfelle noen mennesker er ikke kjent, men Last.fm er i utgangspunktet en musikk smak og anbefalinger nettsted. Du kan lage en konto. Du kan begynne å laste opp musikk fra musikkspilleren til nettstedet, og i utgangspunktet vil det begynne å gi deg musikk anbefalinger basert på hva du lytter til. For eksempel, hvis du går til din profil side-dette er mine- du kan se at du har en liste over nylig lyttet til sporene. Du kan se samlet favorittartister, alle av den slags ting, og igjen, det er en stor API bak Last.fm,  og du kan bruke den til å gjøre mange og massevis av virkelig kule ting. For eksempel, vil jeg gå til en venns side som har denne Last.fm Tools nettside. Dette er faktisk en annen plattform som er bygget på Last.fm API, og det gjør en rekke ganske interessante ting. Hvis jeg logger inn med mitt brukernavn, for eksempel, Jeg kan spørre den til å generere en tag cloud, for eksempel, og hva som kommer til å gjøre er å gi meg tilbake et bilde av alle de forskjellige sjangere og den slags ting som jeg liker å høre på. Hvordan er det å gjøre dette? Veldig utgangspunktet det er å si til Last.fm API her er denne brukeren. Jeg vil gjerne vite sjangeren hver sang som de noensinne har lyttet til, og du kan gjøre det ved å lage en ganske enkel AJAX kall til Last.fm API. Du får tilbake en stor liste, og deretter selvsagt noen andre ting som blir gjort å slå den inn et ord sky, men du kan se samlet det er veldig lett å få tilgang til og svært enkel å bruke. Veldig hyggelig for en rekke ting. Jeg tror det er omtrent alt jeg vil si samlet. En siste ting jeg vil nevne om APIer generelt er at du noen ganger kjøre inn i noe som kalles hastighetsbegrensende, og ideen om hastighetsbegrensende er at du ikke ønsker å misbruke APIer. Med andre ord, det er virkelig hyggelig at mange av disse nettstedene har APIer at du kan gå til og bruke gratis. Men hvis du tjener millioner eller milliarder av forespørsler per dag, for eksempel hvis du sitter fast i en uendelig løkke som er uendelig spør en slags API og komme tilbake en stor mengde data, åpenbart det er ikke bra, så hva mange APIer gjøre er å ha dette hastighetsbegrensende funksjonen som sier at du bare kan gjøre 1000 forespørsler per dag per IP-adresse eller noe sånt. Og hvis du gjør mye testing og den slags ting, du noen ganger kjørt inn i den, og plutselig vil slå deg av og si nei, jeg er ikke å gi deg noen flere data. Hva du ønsker å gjøre er å spille etter reglene. Du vil være sikker på at du leser API spec nøye. Hvis det har visse regler knyttet til det, som du bare kan gjøre X søk per dag eller du kan bare få tilgang til en del av databasen et visst antall ganger eller noe sånt du vil være sikker på at du holder deg til det. Så lenge du spiller innenfor disse reglene vil du sannsynligvis ha en veldig fin tid med APIer. Din generelle takeaway er API-er er virkelig, virkelig nyttig. Det er en API for nesten alle store webtjeneste der ute. Stort sett alle deler av Googles verktøy Suite, Google Maps, Google Earth, GMail, Google Calendar, alle disse tingene har APIer. Du kan bruke dem til å både få data fra serveren og sende data til serveren. Med andre ord, hvis du ønsket å lage en kalender app som kan oppdatere noens Google Kalender, det er en API for det. Hvis du ønsker å gjøre noe som kommer til å fortelle deg hvor plasseringen av en bestemt adresse er at du kan bruke Google Maps API for det. API-er er utrolig nyttig, og de er overalt. Hvis du er interessert i noen slags idé, det er trolig et beslektet API som du kan bruke til å få mye data veldig raskt og veldig enkelt. Hvis du fortsatt leter etter et prosjekt eller hvis du bare ønsker å leke seg med noe generelt, API-er er definitivt verdt å gjøre. Takk, og jeg er glad for å svare på spørsmål som dere måtte ha. Ok, takk. [CS50.TV]