Utilisateurs d'iPhone et d'iPad, connaissez-vous une application appelée Pythonista3 qui vous permet de développer en Python sur les appareils iOS? Si vous souhaitez simplement exécuter Python, je recommande personnellement Carnets --Jupyter. Avec Pythonista3, vous pouvez également développer des fonctions utilisables depuis l'extérieur d'Abri, telles que divers raccourcis et widgets, et créer des jeux.
Cette fois, en utilisant un tel Pythonista 3
** Un widget qui affiche les tendances Qiita et ouvre la page dans Safari lorsque vous cliquez dessus **
J'ai créé, je voudrais donc le présenter.

Dans le cas de ce widget, le contenu de Launcher.py sous ʻExample / Widget` peut être utilisé presque tel quel, donc basé sur cela,
・ Possibilité d'obtenir des titres de tendances et des URL à partir de la page d'accueil de Qiita ・ Une fonction pour sauvegarder temporairement les informations acquises ・ Une fonction pour accéder à nouveau à Qiita et mettre à jour les informations si un certain temps s'est écoulé depuis l'acquisition des informations précédentes.
Ajoutée.
Le nombre de colonnes, le nombre de lignes à l'état plié et les variables de taille de police sont résumés après l'instruction d'importation, vous pouvez donc ajuster la mise en page à votre guise. Il sera exigu et difficile à pousser, mais si vous définissez le nombre de lignes à 5 ou plus, vous pouvez afficher toutes les tendances quotidiennes (30 cas).
qiita_trends_widget.py
import re
import requests
import appex, ui
import os
from math import ceil, floor
import webbrowser
import pickle
import time
COLS = 1
ROWS = 3
fontsize = 12
def get_trend():
	trends = []
	text = requests.get( 'https://qiita.com/').text
	titles = re.findall('title":".{10,100}?",',text)
	urls = re.findall('uuid":".{10,50}?",',text)
	for i in range(30):
		trends.append({'title':'', 'url':''})
		trends[i]['title'] = titles[i][18:-7]
		trends[i]['url'] = 'https://qiita.com/items/'+urls[i][17:-7]
	trends.append({'lastUpdate':time.time()})
	with open("trends.pickle", "wb") as f:
			pickle.dump(trends, f)
	return trends
class LauncherView (ui.View):
	def __init__(self, shortcuts, *args, **kwargs):
		row_height = 110 / ROWS
		super().__init__(self, frame=(0, 0, 300, ceil(len(shortcuts[:-1]) / COLS) * row_height), *args, **kwargs)
		self.buttons = []
		for s in shortcuts[:-1]:
			btn = ui.Button(title=' ' + s['title'], name=s['url'], action=self.button_action, bg_color='#73c239', tint_color='#fff', corner_radius=7, font=('<System-Bold>',fontsize))
			self.add_subview(btn)
			self.buttons.append(btn)
	
	def layout(self):
		bw = (self.width - 10) / COLS
		bh = floor(self.height / ROWS) if self.height <= 130 else floor(110 / ROWS)
		for i, btn in enumerate(self.buttons):
			btn.frame = ui.Rect(i%COLS * bw + 5, i//COLS * bh, bw, bh).inset(2, 2)
			btn.alpha = 1 if btn.frame.max_y < self.height else 0
		
	def button_action(self, sender):
		webbrowser.open(sender.name)
def main():
	widget_name = __file__ + str(os.stat(__file__).st_mtime)
	v = appex.get_widget_view()
	if v is None or v.name != widget_name:
		try:
			with open("trends.pickle", "rb") as f:
				SHORTCUT = pickle.load(f)
		except:
			SHORTCUT = [{'lastUpdate':time.time() - 86400}]
			with open("trends.pickle", "wb") as f:
				pickle.dump(SHORTCUT, f)
		SHORTCUTS = get_trend() if time.time() - SHORTCUT[-1]['lastUpdate'] > 1800 else SHORTCUT #1800 secondes depuis la dernière fois(Une demi-heure)Mettre à jour après ce qui précède
		v = LauncherView(SHORTCUTS)
		v.name = widget_name
		appex.set_widget_view(v)
if __name__ == '__main__':
	main()
** Pythonista3 est bon ** (j'espère que plus de packages pourront être utilisés ...)
Recommended Posts