Top.Mail.Ru
Ответы

Программирование на python с использованием API яндекс расписаний

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
 import requests
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QWidget
from UI import *
from datetime import date

class Rasp(QWidget, Ui_Form):
    def __init__(self):
        super(Rasp, self).__init__()
        self.setupUi(self)
        self.setFixedSize(self.size())
        self.start_city = self.plainTextEdit.toplaintext()
        self.pushButton.clicked.connect(self.swap)
        self.pushButton_2.clicked.connect(self.get_yandex_route)
    def get_route(api_key: str, from_: str, to: str, date_: date = date.today()) -> dict:
        base_url = "https://api.rasp.yandex.net/v3.0/search"
        params = {
            "apikey": api_key,
            "from": from_,
            "to": to,
            "transport_types": "bus",
            "date": date.today(),
            "format": "json",
            "lang": "ru_RU" # Установка языка ответа на русский
        }

        response = requests.get(base_url, params=params)
        response.raise_for_status()

        data = response.json()
        if "segments" in data:
            segments = data["segments"]
            if segments: # Проверяем, что есть хотя бы один сегмент
                segment = segments[0] # Берем первый сегмент
            
                departure_station = segment.get("departure_station")
                arrival_station = segment.get("arrival_station")

                return {
                    "Маршрут": segment.get("title"),
                    "Точка отправки": departure_station.get("title") if departure_station else "Недоступно",
                    "Точка прибытия": arrival_station.get("title") if arrival_station else "Недоступно",
                    "Время отправки": segment.get("departure_time"),
                    "Время прибытия": segment.get("arrival_time"),
                    "stops": [stop.get("title") for stop in segment.get("stops", [])] # Проверяем наличие ключа "stops"
                }
            else:
                return None # Ничего не найдено



    def swap():
        pass
api_key = "API"
start_city = "c146"
end_city = "c213"
route_description = Rasp.get_route(api_key, start_city, end_city)

print(f"Описание маршрута: {route_description}") 

Данный код возвращает ничего, если быть конкретнее:

Как это исправить. API в коде я заменил

По дате
По рейтингу
Аватар пользователя
Оракул
7мес
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
 import requests 
from PyQt5 import QtCore, QtGui, QtWidgets 
from PyQt5.QtWidgets import QWidget 
from datetime import date 
 
class Rasp(QWidget):  # Предполагаем, что у вас есть класс Ui_Form, определенный в UI.py 
    def __init__(self): 
        super(Rasp, self).__init__() 
        # Замените на ваш код инициализации UI из Ui_Form 
        self.plainTextEdit = QtWidgets.QPlainTextEdit(self) 
        self.plainTextEdit_2 = QtWidgets.QPlainTextEdit(self) 
        self.pushButton = QtWidgets.QPushButton("Поменять местами", self) 
        self.pushButton_2 = QtWidgets.QPushButton("Построить маршрут", self) 
        # ... (добавьте остальные элементы UI) 
 
        self.pushButton.clicked.connect(self.swap) 
        self.pushButton_2.clicked.connect(self.get_yandex_route) 
 
    def get_route(self, api_key: str, from_: str, to: str, date_: date = date.today()) -> dict: 
        base_url = "https://api.rasp.yandex.net/v3.0/search" 
        params = { 
            "apikey": api_key, 
            "from": from_, 
            "to": to, 
            "transport_types": "bus", 
            "date": date.today(), 
            "format": "json", 
            "lang": "ru_RU"  # Установка языка ответа на русский 
        } 
 
        response = requests.get(base_url, params=params) 
        response.raise_for_status() 
 
        data = response.json() 
        if "segments" in data: 
            segments = data["segments"] 
            if segments:  # Проверяем, что есть хотя бы один сегмент 
                segment = segments[0]  # Берем первый сегмент 
 
                departure_station = segment.get("departure_station") 
                arrival_station = segment.get("arrival_station") 
 
                return { 
                    "Маршрут": segment.get("title"), 
                    "Точка отправки": departure_station.get("title") if departure_station else "Недоступно", 
                    "Точка прибытия": arrival_station.get("title") if arrival_station else "Недоступно", 
                    "Время отправки": segment.get("departure_time"), 
                    "Время прибытия": segment.get("arrival_time"), 
                    "stops": [stop.get("title") for stop in segment.get("stops", [])]  # Проверяем наличие ключа "stops" 
                } 
            else: 
                return None  # Ничего не найдено 
 
    def swap(self): 
        text1 = self.plainTextEdit.toPlainText() 
        text2 = self.plainTextEdit_2.toPlainText() 
        self.plainTextEdit.setPlainText(text2) 
        self.plainTextEdit_2.setPlainText(text1) 
 
    def get_yandex_route(self): 
        api_key = "ВАШ_API_КЛЮЧ" 
        start_city = self.plainTextEdit.toPlainText() 
        end_city = self.plainTextEdit_2.toPlainText() 
        route_description = self.get_route(api_key, start_city, end_city) 
 
        if route_description: 
            print(f"Описание маршрута: {route_description}") 
        else: 
            print("Маршрут не найден.") 
 
if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    window = Rasp() 
    window.show() 
    sys.exit(app.exec_())