Permalänk
Medlem

API-svar till databas

Hej,

Jag är noob så förklara gärna på ett enkelt sätt.

Jag undrar om det finns något enkelt sätt att göra följande?:

1. Göra ett API-anrop som t.ex. detta http://api.sl.se/api2/LineData.json?model=jour&key=[key]
(Är från detta APIet: https://www.trafiklab.se/api/sl-hallplatser-och-linjer-2/doku....

2. Spara anropet i en databas.

3. Repetera det en gång per dygn.

Jag betalar gärna för om det finsn en färdig tjänst som på ett enkelt sätt gör detta utan massa kodning.
Kollat Firebase men fattar ej hur man på ett enkelt sätt gör ett anrop och får det sparat i en databas.

Tack på förhand!

/Jonas

Permalänk
Medlem

Använd valfritt programmeringsspråk som sparar resultatet till en databas och kör ett cronjob varje dygn.

Skickades från m.sweclockers.com

Permalänk
Medlem

Skriptspråk (tex perl, python, etc) och lämpliga moduler.
Databas (tex sqlite3), lite beroende på åtkomst, annars mariadb eller något...
Program att köra det med viss intervall (tex fcron)

Kanske en raspberry pi att köra det på...

Blir ju inte särskilt mycket kod av det hela...

Går säkert att hitta någon på sweclockers som skulle vara villig att sätta ihop det mot ersättning.

Permalänk

@8j0nte8: Tjena

Tror det blir svårt att få till utan nån kodning alls, men det är ett väldigt litet jobb att få till om det enda du vill är att spara ner data du får tillbaka från API.

Vill du inte hosta något själv så finns ju Google Firebase där du kan köra "cloud functions" vilket är som ett litet program som körs utan att du behöver tillhandahålla en server.

Jag tror dock det enklaste och billigaste är följande:

Köp en liten ubuntu-burk på www.digitalocean.com . Installera python eller nodejs samt postgres eller mysql, och gör ett litet script(typ 15 rader) som gör anropet och skriver svaret till din databas.

Jag kan hjälpa dig med det om du vill, hör av dig i PM så kan vi snacka.

Permalänk
Medlem

Tack för svaren! Uppskattas verkligen!

Jag skall berätta lite vad som är bakgrunden till mitt inlägg.

Jag har ett projekt jag vill ha genomfört men om jag inte är villigt att betala så mycket som det verkar behövas om jag överlåter allt till någon annan. En av de billigaste på Freelancer säger kring 5000 SEK och några av de dyrare nämner upp kring 1200-1800 dollar. Pengar som jag inte har till just detta även om jag tänkt använda det i jobbet ibland (men pengarna kommer från egen ficka då det snarare är eget intresse och ett projekt jag vill få gjort än något som fyller så extremt mycket nytta för företaget jag jobbar på). Jag vill slutföra ett projekt så jag kan gå vidare till nästa (har många idéer haha). Jag trodde ej det skulle vara ett projekt som skulle kräva så mycket arbete vilket självklart var naivt. Skall jag lägga flera tusenlappar så vill jag lära mig något på vägen som jag kan ha nytta av i nästa projekt och då är jag mer villig att ersätta dom som hjälper mig på vägen än att betala 5 papp till någon som gör allt och att jag inte lärt mig något alls. Slutresultatet måste ej vara tip-top utan vill bara få det att funka. Stöter jag på buggar m.m. så får jag lära mig att åtgärda dom eller se om någon av er kan hjälpa mig.

Projektets slutmål är att ha en sida där jag kan söka bland alla hållplatser som finns i detta APIet https://www.trafiklab.se/api/sl-hallplatser-och-linjer-2/doku... och när man klickar på en av träffarna så ser man dom en bild som denna: https://developers.google.com/maps/documentation/javascript/e...

Skiss på hur jag vill ha gränssnittet(a=sökfält, b=resultatfält, c och d=hållplatsnamn e=street view)

Varför använder jag inte bara google maps vanliga sida?:

I Google Maps kan man söka hållplatser men oftast kan man inte se alla hållplatserna på kartan utan endast en samlingspunkt(alltså två olika hållplatser är under samma ikon). Funkar ju självklart om hållplatserna är helt parallella men ibland ligger den andra hållplatsen kanske meter bort. Ett exempel är hållplats Fresta kyrka: https://www.google.se/maps/place/Fresta+kyrka/@59.5185535,17....

Ena hållplatsen är här: https://www.google.se/maps/@59.5179827,17.957348,3a,75y,345.3...

och den andra är en bit ifrån(runt kurvan): https://www.google.se/maps/@59.5185535,17.9568192,3a,75y,281....

Bilderna från Fresta Kyrka är från 2011 men denna hållplatsen är bara ett exempel.

Saker som behöver göras är:

1. Skriva kod som sköter anrop till: http://api.sl.se/api2/LineData.json?model=stop&key=[key] och spara svaret(JSON) i en databas(kommer benämna den databas1). Anropet skall göras om en gång per dygn. Koden skall radera befintlig information i databasen och skriva ny vid lyckat anrop.

2. Skriva kod som sköter anrop till: http://api.sl.se/api2/LineData.json?model=jour&key=[key] och spara svaret(JSON) i en databas (kommer benämna den databas2). Anropet skall göras om en gång per dygn. Koden skall radera befintlig information i databasen och skriva ny vid lyckat anrop.

3. Skriva kod som är kopplat till sökrutan(a). När man skriver t.ex. ett hållplatsnamn som Fresta Kyrka så söker den efter passande träffar i databas1(StopPointName). Önskar att autocomplete används när man söker.

4. Skriva kod som exekveras när man trycker Enter(efter att man skrivit hållplatsnamn t.ex. Fresta kyrka). Koden skall göra så att resultatet(b) innehållande alla hållplatser som har namnet Fresta kyrka visas ihop med vilka linjer som trafikerar respektive hållplats. Linjenumret får man genom att använda StopPointNumber i sökresultaten(i databas1) och söka i databas2(StopPointNumber i databas1 är samma som JourneyPatternPointNumber i databas2). Bussens riktning skall också komma med. Riktningen får man fram genom att söka linjenummer och directionscode(får man från databas2) och köra det mot databas3. Databas3 innehåller kopplingen linjenummer, directionsCode och namnet på riktningen(detta har jag i en excelfil i dagsläget men skall få in detta i en databas).

5. Skriva kod som exekveras när användaren valt en av hållplatserna(c eller d). Koden skall göra så att Googles API skall anropas och en karta skall visas som denna: https://developers.google.com/maps/documentation/javascript/e...

Så jag har en del att jobba med men skall få ordning på punkt 1 och 2 först.

Vad skall man köra för ”back-end” språk(tror det heter så va)?
Javascript, Golang, Nodejs eller något annat? Helst något jag kan ha nytta av i nästa projekt vad det än kan vara.

Tack återigen!

Fetmarkerat delar.
Permalänk
Medlem

I ett första skede hade inte jag lagrat data i databasen utan kört mot API hela tiden. Då det blir en enklare lösning. Det är först om du får prestanda problem, eller om du når i taket på antalet anropp du kan göra till API eller om API har mycket nertid som jag hade övervägt att lagra det i en databas.

Permalänk
Medlem

Ska du göra det manuellt utan att koda så rekommenderar jag Postman: https://www.getpostman.com/

Permalänk
Medlem

Vill du inte betala något så kan du göra det med AWS. En lambdafunktion som kör anropet och sparar i dynamodb. Så schemalägger du lambdan att köra varje dag. Du får 1 miljon lambda-anrop per månad och 25GB lagring i dynamodb gratis. Tänker mig att det tar ett tag att ta slut på det.

Permalänk
Medlem
Skrivet av Tino:

I ett första skede hade inte jag lagrat data i databasen utan kört mot API hela tiden. Då det blir en enklare lösning. Det är först om du får prestanda problem, eller om du når i taket på antalet anropp du kan göra till API eller om API har mycket nertid som jag hade övervägt att lagra det i en databas.

Det här är en väldigt bra poäng.

Du slipper hela backendjobbet.
Annars blir det ju Frontend -> Ditt API -> SLs API
Plus att SLs API har nyare data än vad du kommer ha i ditt API.

Om du nu ska skriva backend så hade jag skrivit det i Python med Flask (om du nu ska exponera din databas med hjälp av ett REST-API).

Permalänk
Medlem

I Azure kan sätta upp en gratis söktjänst (max 5 olika index, men du behöver väl bara 1 antar jag för hållplatser. Behöver du mer så kan man vara lite påhittig med taggar). Där kan du få ut autocomplete/suggestions och annat roligt.

Är väl lite meckigt om man inte kodat förr, men tänkte om du vill komma billigt undan

Finns en del resurser att skaffa gratis i Azure.

För databas så kan du köra CosmosDB, som är en NoSQL-databas, som inte kostar många korvören som du kan spara ner din json i.

Visa signatur

MacBook Pro (16 tum, 2019)
2,3 GHz 8-Core Intel Core i9
64 GB 2667 MHz DDR4
Intel UHD Graphics 630 1536 MB
AMD Radeon Pro 5500M 8 GB

Permalänk
Medlem
Skrivet av ulf5:

Vill du inte betala något så kan du göra det med AWS. En lambdafunktion som kör anropet och sparar i dynamodb. Så schemalägger du lambdan att köra varje dag. Du får 1 miljon lambda-anrop per månad och 25GB lagring i dynamodb gratis. Tänker mig att det tar ett tag att ta slut på det.

Speciellt eftersom datan skrivs över varje dag
Har AWS någon söktjänst med autocomplete/suggestions gratis? Annars går det att skicka vidare till Azure Search som jag skrev i inlägget ovanför.

Visa signatur

MacBook Pro (16 tum, 2019)
2,3 GHz 8-Core Intel Core i9
64 GB 2667 MHz DDR4
Intel UHD Graphics 630 1536 MB
AMD Radeon Pro 5500M 8 GB

Permalänk
Inaktiv

Du behöver ingen databas. Bara spara resultatet i minnet i servern och hämta om det om det är äldre än ett visst tidsintervall eller inte finns.

Jag personligen hade kört C# och .NET core för backend och Vue till frontend.

Permalänk
Medlem

@Erooo: De har någon free trial på CloudSearch och ett år eller något gratis Elasticsearch.

Permalänk
Medlem
Skrivet av anon81912:

Du behöver ingen databas. Bara spara resultatet i minnet i servern och hämta om det om det är äldre än ett visst tidsintervall eller inte finns.

Jag personligen hade kört C# och .NET core för backend och Vue till frontend.

Håller med om detta, att lagra informationen i en databas tillför egentligen bara onödig komplexitet.
Däremot kanske det kan vara smart att hålla en cachad kopia av respektive json-resultat utifall API'erna du jobbar mot skulle ligga nere.

Permalänk
Medlem

Försökte knåpa ihop något lite fort för skojs skull. Dock så...
1. Jag tycker www.trafiklab.se har en onödigt complex API. Varför ska det vara så avancerat??
2. Jag sket i deras API (var typ krångel med nycklar) och laddade istället ner en statisk fil med alla stoppen här: https://data.samtrafiken.se/trafiklab/gtfs-sverige-2/
3. Inser att latitud och longitud inte är optimala för panorama bilder via Google Maps. Koordinaterna är inte perfekt utplacerade.
4. Ännu en API nyckel för Google Maps grej (sigh... T__T)
5. Förstår inte för världen hur jag ska få ut vilka linjer som går på varje trafikplats
6. Get upp x)

Kom såhär långt iaf, du kan ju testa söka på "Fresta Kyrka" så förstår du vad jag menar med att koordinaterna inte är perfekt utsatta!

koden: (krångel med cross-script så koden kan inte köras från denna sida)
https://repl.it/@johanbx/sweclocker-sl-trafik-med-api

sidan: (här fungerar sidan)
https://sweclocker-sl-trafik-med-api--johanbx.repl.co/

Permalänk
Medlem

Kul projekt!
Har gjort ett par tjänster mot deras api. Inget speciellt svårt men inte trivialt om man inte kodar tror jag, vissa av deras apier ger en mongo stor json resons som kräver att det deserialiseras till en class för hantering.

Lite tips for web och api anrop.
https://www.thepolyglotdeveloper.com/2017/10/consume-api-data...

Håller med övriga angående databas. Inte svårt o lägga allt i en web storage. Du behöver inte ens en databas. Amazon S3 bucket eller azure storage blob/table funkar bra.
Men det kansle funkar också utan, ha det i minnet eller spara lokalt i fil på servern.

Fixa en API nyckel och skicka ett pm så kan jag hjälp dig om du fastnar. Lovar inte direkt respons dock;)

Skickades från m.sweclockers.com

Visa signatur

Intel Core i5 2500k @ 4.3 GHz| Asus Geforce GTX580 DUII OC 930MHz | Asus P8P67 LE | 4GB RAM | Win 8.

Permalänk
Medlem

Tack för alla svar och input! Det uppskattas verkligen!!

Jag har helt enkelt lite att fundera på.

Meningsuppbyggnad