Advertisement
peachyontop

Display API

Apr 5th, 2025
9
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. from kivy.app import App
  2. from kivy.uix.boxlayout import BoxLayout
  3. from kivy.clock import mainthread
  4. from plyer import gps, notification
  5. import requests
  6. import json
  7.  
  8. class WeatherApp(App):
  9. def build(self):
  10. self.layout = BoxLayout(orientation='vertical')
  11. self.location_label = Label(text="Getting location...", font_size=24)
  12. self.temp_label = Label(text="", font_size=24)
  13. self.desc_label = Label(text="", font_size=24)
  14. self.refresh_btn = Button(text="Refresh", on_press=self.refresh_weather)
  15.  
  16. self.layout.add_widget(self.location_label)
  17. self.layout.add_widget(self.temp_label)
  18. self.layout.add_widget(self.desc_label)
  19. self.layout.add_widget(self.refresh_btn)
  20.  
  21. self.api_key = "YOUR_API_KEY" # Get from openweathermap.org
  22. self.start_gps()
  23. return self.layout
  24.  
  25. def start_gps(self):
  26. try:
  27. gps.configure(on_location=self.on_location)
  28. gps.start()
  29. except NotImplementedError:
  30. notification.notify(title="GPS Error", message="GPS not supported")
  31.  
  32. def on_location(self, **kwargs):
  33. lat = kwargs.get('lat')
  34. lon = kwargs.get('lon')
  35. if lat and lon:
  36. self.get_weather(lat, lon)
  37.  
  38. def refresh_weather(self, instance):
  39. self.start_gps()
  40.  
  41. def get_weather(self, lat, lon):
  42. url = f"http://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={self.api_key}&units=metric"
  43. try:
  44. response = requests.get(url)
  45. data = json.loads(response.text)
  46. self.update_ui(data)
  47. except Exception as e:
  48. notification.notify(title="Weather Error", message=str(e))
  49.  
  50. @mainthread
  51. def update_ui(self, data):
  52. self.location_label.text = f"{data['name']}, {data['sys']['country']}"
  53. self.temp_label.text = f"Temperature: {data['main']['temp']}°C"
  54. self.desc_label.text = f"Weather: {data['weather'][0]['description']}"
  55.  
  56. if __name__ == '__main__':
  57. WeatherApp().run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement