2024-09-24, 07:57
  #1
Avstängd
PalmeKillers avatar
Jag vill hämta trafikdata ifrån SL , dvs när går tåget. Mellan station x och y.. Någon som är bekant SL api?

Antar att man får en json fil?
Citera
2024-09-24, 09:24
  #2
Medlem
StefanHeterJags avatar
https://tagtider.net/api/
Citera
2024-09-24, 10:32
  #3
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av PalmeKiller
Jag vill hämta trafikdata ifrån SL , dvs när går tåget. Mellan station x och y.. Någon som är bekant SL api?

Antar att man får en json fil?
Du får göra det i flera steg.
Först måste du ta reda på placeID för de två stationerna.
Exempel i Curl för att söka på (url-encodat) Hötorget

Kod:
curl https://services.c.web.sl.se/api/locationlookup?search=h%C3%B6torget | jq '.[0].placeId'

När du fått båda placeId så kan du kolla på ett Post-anrop till https://services.c.web.sl.se/api/journeyplanner
Kolla både på hur headers och payload ser ut. Det gör du genom att ta upp Nätverksläget på Devtools och skicka ett anrop "live" (alltså söka på en SL-resa)

Payload ser (typ) ut så här:
Kod:
{"destination":{"placeId":"OTA5MTAwMTAwMDAwMjEwOA=="},"origin":{"placeId":"OTA5MTAwMTAwMDAwOTExOQ=="},"searchForArrival":false,"transportTypes":["METRO","BUS","TRAIN","TRAM","SHIP","NARBUSS"]}
__________________
Senast redigerad av Enterprise 2024-09-24 kl. 10:37.
Citera
2024-09-24, 14:33
  #4
Medlem
Enterprises avatar
Litet Pythonskript som exemplifierar:

Kod:
#!/usr/bin/env python

import requests
import urllib.parse

stations = []
placeIds = []
stations.append(input("Från vilken station? "))
stations.append(input("Till vilken station? "))

def fetchStationId(search_string):
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
    encoded_search_string = urllib.parse.quote(search_string)
    url = f'https://services.c.web.sl.se/api/locationlookup?search={encoded_search_string}'
    
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status() 
        return response.json()
    except requests.exceptions.RequestException as error:
        print(f'Error fetching location lookup: {error}')
        return None

def fetchSLdata(place1, place2):
    url = "https://services.c.web.sl.se/api/journeyplanner"

    headers = {
        "accept": "application/json, text/plain, */*",
        "accept-encoding": "gzip, deflate, br, zstd",
        "accept-language": "sv-SE,sv;q=0.8",
        "cache-control": "no-cache",
        "content-length": "192",
        "content-type": "application/json",
        "origin": "https://sl.se",
        "pragma": "no-cache",
        "priority": "u=1, i",
        "referer": "https://sl.se/",
        "sec-ch-ua": '"Brave";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": '"Windows"',
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-site",
        "sec-gpc": "1",
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
    }

    payload = {
        "destination": {
            "placeId": place2
        },
        "origin": {
            "placeId": place1
        },
        "searchForArrival": False,
        "transportTypes": ["METRO", "BUS", "TRAIN", "TRAM", "SHIP", "NARBUSS"]
    }
    
    response = requests.post(url, headers=headers, json=payload)

    if response.status_code == 200:
        print("Request successful!")
        return(response.json())
    else:
        print(f"Failed with status code: {response.status_code}")
        print(response.text)
        return(false)

for station in stations:
    placeIds.append(fetchStationId(station)[0]["placeId"])

jsonData = fetchSLdata(placeIds[0],placeIds[1])

print(jsonData)
__________________
Senast redigerad av Enterprise 2024-09-24 kl. 14:36.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in