[IOS] J'ai créé un widget qui affiche la tendance de Qiita dans Pythonista3. [Python]

introduction

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. qwid.png

Ce que j'ai fait

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.

code

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()

Résumé

** Pythonista3 est bon ** (j'espère que plus de packages pourront être utilisés ...)

Recommended Posts

[IOS] J'ai créé un widget qui affiche la tendance de Qiita dans Pythonista3. [Python]
J'ai fait un programme de gestion de la paie en Python!
Un mémo que j'ai écrit un tri rapide en Python
J'ai créé une application Web en Python qui convertit Markdown en HTML
J'ai créé un bot Discord en Python qui se traduit quand il réagit
J'ai créé un programme cryptographique César en Python.
Création du wrapper d'API Qiita Python "qiipy"
En Python, j'ai créé un LINE Bot qui envoie des informations sur le pollen à partir des informations de localisation.
J'ai créé une VM qui exécute OpenCV pour Python
J'ai fait un texte Python
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai créé un lecteur de flux rapide en utilisant feedparser en Python
J'ai essayé "un programme qui supprime les déclarations en double en Python"
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai fait un Line-bot avec Python!
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
J'ai fait un package qui peut comparer des analyseurs morphologiques avec Python
J'ai créé un programme qui résout la recherche d'erreur en quelques secondes
J'ai fait un shuffle qui peut être réinitialisé (inversé) avec Python
[python] J'ai créé une classe qui peut écrire rapidement une arborescence de fichiers
J'ai créé un générateur brouillé qui encode vos phrases préférées de UTF-8 à Shift-JIS (cp932) en Python
J'ai fait un compteur de caractères avec Python
J'ai fait une carte hexadécimale avec Python
Après avoir étudié Python3, j'ai créé un Slackbot
J'ai créé un outil de mot de passe en Python.
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.
J'ai essayé de développer un formateur qui génère des journaux Python en JSON
[Python] J'ai créé un utilitaire qui peut accéder au type dict comme un chemin
J'ai créé une extension Chrome qui affiche un graphique sur la page Amedas
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
J'ai créé un outil qui facilite un peu la décompression avec CLI (Python3)
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai fait un module PyNanaco qui peut charger des crédits nanaco avec python
J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
J'ai créé un Line Bot qui utilise Python pour récupérer les e-mails non lus de Gmail!
Je veux créer une fenêtre avec Python
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
J'ai essayé de jouer à un jeu de frappe avec Python
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
J'ai écrit une classe en Python3 et Java
J'ai créé une image Docker qui peut appeler FBX SDK Python à partir de Node.js
Un programme qui supprime les instructions en double en Python
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
[Débutant] Que se passe-t-il si j'écris un programme qui s'exécute sur php en Python?
[Python] J'ai créé un LINE Bot qui détecte les visages et effectue le traitement de la mosaïque.
J'ai fait un module en langage C qui filtre les images chargées par Python