Forumdelen sponsras av

Trädvy Permalänk
Medlem
Plats
Ön
Registrerad
Apr 2010

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

Trädvy Permalänk
Medlem
Plats
Norrland
Registrerad
Feb 2004

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

Skickades från m.sweclockers.com

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Feb 2005

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.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Sep 2010

@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.

Trädvy Permalänk
Medlem
Plats
Ön
Registrerad
Apr 2010

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.
Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Apr 2002

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.

CPU: i7 6700k + Fractal Design S24 GPU: ASUS GeForce GTX 1070 8GB DUAL OC RAM: Kingston 16GB 2133MHz CL13 MB: MSI GAMING M7 PSU: EVGA Supernova G2 850W, 80+ Gold SSD: Samsung SM951 256GB M.2 NVMe + Samsung EVO 850 250GB M.2 Chassi: Fractal Design S OS: W10 Pro Skrämar: Acer XB270HU + 2x Dell U2412M
NAS: Synology DS415+ (4x WD RED 6 TB) Console: Xbox One

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

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

Stationär:Asrock P67 Extreme 4 | i5 2500K@4.5Ghz | Asus GTX 970 black Överklockad | Samsung Evo 960 1TB, 2x WD blue 5TB | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02
Laptop: Dell XPS 15 2017
Mobil: Oneplus 6 128GB

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Okt 2007

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.

Trädvy Permalänk
Medlem
Plats
KLAX
Registrerad
Jan 2004
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).

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Dec 2010

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.

Moderkort: Asus P6T Deluxe v2 - Processor: i7 920 @ 3.8 - Kylare: NH-D14 - RAM: Corsair Vengence DDR3 3x4GB - Grafik: Gigabyte GeForce 660Ti OC - HD: 1x Crusial M4 128 SSD, 4xSamsung total: 1900GB - Nätagg: XFX 650W Core Edition - Chassi: Fractal Design Arc
Köp/sälj-recensioner: https://www.sweclockers.com/forum/trad/1079311-sweclockers-ma...

Trädvy Permalänk
Medlem
Plats
Sundsvall
Registrerad
Dec 2010
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.

Moderkort: Asus P6T Deluxe v2 - Processor: i7 920 @ 3.8 - Kylare: NH-D14 - RAM: Corsair Vengence DDR3 3x4GB - Grafik: Gigabyte GeForce 660Ti OC - HD: 1x Crusial M4 128 SSD, 4xSamsung total: 1900GB - Nätagg: XFX 650W Core Edition - Chassi: Fractal Design Arc
Köp/sälj-recensioner: https://www.sweclockers.com/forum/trad/1079311-sweclockers-ma...

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Feb 2006

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.

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Okt 2007

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

Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Jan 2015
Skrivet av Killbom:

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.

Trädvy Permalänk
Medlem
Plats
Linköping atm, men annars Täby
Registrerad
Dec 2011

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/

Trädvy Permalänk
Medlem
Registrerad
Jul 2011

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

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

Trädvy Permalänk
Medlem
Plats
Ön
Registrerad
Apr 2010

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

Jag har helt enkelt lite att fundera på.

Meningsuppbyggnad