You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.6 KiB
Python
87 lines
2.6 KiB
Python
import requests, json, os, random
|
|
from kivy.app import App
|
|
from kivy.uix.label import Label
|
|
from kivy.uix.boxlayout import BoxLayout
|
|
from kivy.uix.button import Button
|
|
from kivymd.app import MDApp
|
|
from kivymd.uix.button import MDRectangleFlatButton
|
|
|
|
# API key
|
|
api_key="A RECUPERER DU SERVEUR API"
|
|
api_url = "https://citations.domaine.tld/api/citations/random"
|
|
|
|
|
|
class MainApp(MDApp):
|
|
def build(self):
|
|
return MainWidget()
|
|
|
|
class MainWidget(BoxLayout):
|
|
def __init__(self, **kwargs):
|
|
super(MainWidget, self).__init__(orientation='vertical', **kwargs)
|
|
self.cols = 1
|
|
|
|
# citation
|
|
self.quote_label = Label(text="", font_size='20sp')
|
|
self.load_citation()
|
|
self.add_widget(self.quote_label)
|
|
|
|
# bouton
|
|
button = MDRectangleFlatButton(text='Recharger', size_hint=(None, None), size=(300, 100), pos_hint={'center_x': 0.5, 'center_y': 0.1}, line_color="white", text_color="white")
|
|
button.bind(on_press=self.load_citation)
|
|
self.add_widget(button)
|
|
|
|
# espace en dessous le bouton
|
|
empty_label = Label(size_hint=(None, None), size=(1, 50))
|
|
self.add_widget(empty_label)
|
|
|
|
# for button
|
|
def load_citation(self, instance=None):
|
|
quote = get_citation(api_url)
|
|
auteur = quote[1]
|
|
citation = split_string(quote[0], 40)
|
|
|
|
self.quote_label.text = citation + "\n\n -- " + auteur
|
|
|
|
background_images = [f for f in os.listdir('./assets/img/') if f.endswith(('.png'))]
|
|
if background_images:
|
|
random_image = random.choice(background_images)
|
|
self.canvas.before.children[1].source = os.path.join('./assets/img/', random_image)
|
|
|
|
|
|
# fonction pour récupérer la citation de l'API
|
|
def get_citation(api_url):
|
|
|
|
try:
|
|
headers = {
|
|
"API-Key": api_key
|
|
}
|
|
|
|
response = requests.get(api_url, headers=headers)
|
|
datas = json.loads(response.text)
|
|
zen_quote = [datas["citations"]["citation"], datas["citations"]["auteur"]]
|
|
|
|
# print(zen_quote[0])
|
|
return zen_quote
|
|
|
|
except Exception as e:
|
|
print(f"Erreur lors de la requête API : {e}")
|
|
return "pb"
|
|
|
|
# fonction pour mettre en forme le texte
|
|
def split_string(input_string, chunk_size):
|
|
result = []
|
|
while input_string:
|
|
index = min(chunk_size, len(input_string))
|
|
while index < len(input_string) and input_string[index] != ' ':
|
|
index += 1
|
|
|
|
result.append(input_string[:index])
|
|
input_string = input_string[index:].lstrip()
|
|
|
|
return "\n".join(result)
|
|
|
|
|
|
# main
|
|
if __name__ == '__main__':
|
|
app = MainApp()
|
|
app.run() |