J'ai écrit un outil CLI en langue Go pour afficher le flux de balises de Qiita dans CLI

Lisez l'article de Zenn (Go language package pour obtenir le flux) et [gofeed](https: // github) J'ai découvert qu'il existe un outil pratique appelé .com / mmcdole / gofeed) et je voulais le toucher, j'ai donc créé un outil simple qui affiche simplement le flux de balises Qiita sur la CLI.

qiita-tag-feed-reader-cli - CLI reader of Qiita tag feed.

Comment utiliser qiita-tag-feed-reader-cli

L'explication est la même que README sur le lien ci-dessus, mais c'est comme suit. est.

# install
go get github.com/shinshin86/qiita-tag-feed-reader-cli

#Afficher le flux en spécifiant des balises au hasard
qiita-tag-feed-reader-cli

#Afficher le flux de la balise spécifiée(dans ce cas"Go"Mais"go"MaisOK)
qiita-tag-feed-reader-cli Go

#Bien sûr, vous pouvez également utiliser le japonais
qiita-tag-feed-reader-sécurité cli

Je voulais toucher complètement gofeed, et c'était un outil que j'ai créé dans le but d'étudier Go lui-même, mais de manière inattendue, il est devenu un outil qui peut être utilisé dans un peu de temps libre comme pendant la construction, donc je vais le rapporter ici aussi. Cela dépend de ce que vous avez reçu. (Parce qu'il est lié à Qiita avant tout)

La source elle-même est très petite, donc je pense qu'il est préférable de lire le code source directement pour savoir ce que vous faites. Cependant, pour le moment, je l'écris en Qiita, et j'écrirai les points techniques (bien que cela ne puisse être dit).

Je n'expliquerai pas sur gofeed

De plus, il semble que la table soit retournée après avoir parlé jusqu'ici, mais l'utilisation de gofeed lui-même est gofeed README. Je vais l'omettre car c'est un niveau qui peut être compris en regardant le post de Zenn posté ci-dessus.

J'écrivais moi-même un code pour analyser le flux acquis avec Go, mais je pensais que ce serait pratique si j'avais gofeed car je pouvais ignorer tout le traitement en même temps. Un outil facile à utiliser.

Ordre d'affichage unique à CLI

Comme vous pouvez le voir en appuyant sur la commande, les informations sont affichées dans l'ordre suivant. En effet, il est utilisé sur la CLI, de sorte que la ligne de visée se déplace de bas en haut.

・
・
・
----------------------------------------------------
<feed items>
-----------------------
<feed items>
-----------------------
<feed items>
-----------------------
<feed title>
<feed type> <feed version>
======================

Informations sur le flux

Je voulais aussi utiliser gofeed, donc je reçois un fil de tag. Pour cette URL de flux, je me suis référé au post Qiita ci-dessous.

[Qiita Article / User / Organization / Tag Feed URL (URL XML / ATOM de l'utilisateur ou du tag que vous souhaitez suivre) -Tag Feed URL](https://qiita.com/KEINOS/items/f0a5bce2fa9cfec85f8b#%E3% 82% BF% E3% 82% B0% E3% 83% 95% E3% 82% A3% E3% 83% BC% E3% 83% 89% E3% 81% AE-url)

Traitement pour supprimer la balise HTML du HTML acquis

Le processus de suppression des balises HTML est mis en œuvre en se référant au code ci-dessous. (En fait, c'est presque la même chose sauf qu'il prend en charge les commentaires HTML ...) https://gist.github.com/g10guang/04f11221dadf1ed019e0d3cf3e82caf3

Le code source pour supprimer les balises HTML réellement écrites dans qiita-tag-feed-reader-cli est répertorié ci-dessous.

func removeHTMLTag(html string) string {
	const pattern = `(<\/?[a-zA-A!-]+?[^>]*\/?>)*`
	r := regexp.MustCompile(pattern)
	groups := r.FindAllString(html, -1)

	// Replace the long string first
	sort.Slice(groups, func(i, j int) bool {
		return len(groups[i]) > len(groups[j])
	})

	for _, group := range groups {
		if strings.TrimSpace(group) != "" {
			html = strings.ReplaceAll(html, group, "")
		}
	}
	return html
}

Lorsque je l'implémentais en regardant le code de référence, je pensais que c'était vrai, comme vous pouvez le voir dans les commentaires du code ci-dessus, les chaînes sont remplacées dans l'ordre du plus long.

Parce que, si vous extrayez la balise avec cette expression régulière, vous pouvez obtenir les deux modèles de balises suivants en tant que modèle de balise acquis.

</span></div>
</span>

Lorsque vous remplacez HTML par strings.ReplaceAll, si </ span> ʻest remplacé en premier, </ span> </ div> `sera laissé derrière, alors remplacez-le par une longue chaîne. J'essaye de faire. Cela supprimera avec succès toutes les balises HTML.

En fait, j'ai également besoin d'un code de test pour prouver correctement ce comportement, mais je voulais le mettre en forme rapidement, alors je l'ai mis de côté. Comme c'est un gros problème, j'ajouterai un code de test à une date ultérieure. → Ajout: Un test a été ajouté.

À propos de la partie qui acquiert au hasard l'étiquette de Qiita

Ce n'est pas un point technique, mais si vous exécutez cet outil sans argument, il essaiera de sélectionner au hasard une balise Qiita et d'afficher le flux. Pour cette balise Qiita, reportez-vous au code ci-dessous et obtenez les balises par ordre de popularité.

[(Utilisation de l'API Qiita v2) Comment obtenir des informations sur les balises Qiita via l'API - Exemple de code à obtenir sans spécifier de balises](https://qiita.com/kojiro-s/items/3862cf968d807497eef8#%E3%82 % BF% E3% 82% B0% E3% 82% 92% E6% 8C% 87% E5% AE% 9A% E3% 81% 97% E3% 81% AA% E3% 81% 84% E3% 81% A7 % E5% 8F% 96% E5% BE% 97% E3% 81% 99% E3% 82% 8B% E3% 82% B5% E3% 83% B3% E3% 83% 97% E3% 83% AB% E3 % 82% B3% E3% 83% BC% E3% 83% 89)

Comme vous le savez peut-être déjà à partir du code source, je gère 100 balises populaires au moment de l'implémentation dans le fichier Go et les appelle au moment de l'exécution. Par conséquent, il se présente sous la forme de ** sélectionnés au hasard parmi les 100 balises populaires au moment où j'ai créé cet outil.

Bien sûr, il est possible de sélectionner 100 balises en temps réel au moment de l'exécution, mais comme c'était à l'origine le but d'essayer gofeed, c'est ici complètement horizontal. De plus, je pense que la limite supérieure de l'API Qiita viendra bientôt si je ne m'authentifie pas, donc j'ai également senti que je ne voulais pas en tenir compte.

fin

Donc, si vous le souhaitez, veuillez l'utiliser. Pour moi, la simplicité de cet outil va bien avec un peu de temps libre, et c'est devenu un outil qui peut tuer le temps de manière inattendue. Par tous les moyens, comme le temps d'attente pour la construction.

Quand je l'ai réellement utilisé ↓ qiita-tag-feed-reader-cli demo gif

Recommended Posts

J'ai écrit un outil CLI en langue Go pour afficher le flux de balises de Qiita dans CLI
J'ai créé un outil CLI pour convertir les images de chaque répertoire en PDF
J'ai fait une sorte d'outil de traitement d'image simple en langage Go.
Je veux travailler avec un robot en python.
Je t'ai écrit pour regarder le signal avec Go
J'ai écrit rapidement un programme pour étudier la DI avec Python ①
Je l'ai écrit en langage Go pour comprendre le principe SOLID
J'ai écrit un script pour obtenir un site populaire au Japon
J'ai essayé d'écrire dans un modèle de langage profondément appris
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
Made Gomi, un outil de corbeille pour RM en langue Go
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai écrit un script pour vous aider à démarrer avec AtCoder à grande vitesse!
J'ai écrit une fonction pour charger le script d'extension Git en Python
J'ai écrit un script pour extraire les liens de pages Web en Python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
J'ai écrit un code pour convertir quaternion en angle de graissage de type z-y-x avec Python
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
(Matplotlib) Je veux dessiner un graphique avec une taille spécifiée en pixels
J'ai créé un outil pour convertir Jupyter py en ipynb avec VS Code
J'ai créé un outil qui facilite un peu la décompression avec CLI (Python3)
Notes J'ai recherché la création d'outils de ligne de commande en Python
Je veux imprimer dans la notation d'inclusion
J'ai essayé un langage fonctionnel avec Python
J'ai créé un outil de mot de passe en Python.
J'ai créé un outil pour corriger les données GPS avec l'API Map Matching de Mapbox (Mapbox Map Matching API)
J'ai eu une erreur en essayant d'exécuter Hello World en langue Go
J'ai créé une API de recherche de château avec Elasticsearch + Sudachi + Go + echo
J'ai essayé d'implémenter ce qui semble être un outil de snipper Windows avec Python
Un mémo que j'ai écrit un tri rapide en Python
Je veux créer une fenêtre avec Python
J'ai essayé d'intégrer Keras dans TFv1.1
Je veux faire un jeu avec Python
J'ai écrit une classe en Python3 et Java
Cloner avec une branche / balise spécifique dans GitPython
J'ai écrit un modèle de conception dans l'édition Kotlin Prototype
J'ai créé un outil pour compiler nativement Hy
J'ai joué avec Diamond, un outil de collecte de métriques
J'ai créé un outil pour obtenir de nouveaux articles
Je veux écrire dans un fichier avec Python
J'ai essayé de créer un environnement avec WSL + Ubuntu + VS Code dans un environnement Windows
Je suis resté bloqué en essayant de spécifier un chemin relatif avec relative_to () en python
J'ai essayé de créer une classe pour rechercher des fichiers avec la méthode Glob de Python dans VBA
J'ai écrit du code Python pour créer un diagramme de dépendance de table (vue) (PlantUML) à partir de SQL
Comment convertir / restaurer une chaîne avec [] en python
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Essayez de créer un module Python en langage C
J'ai écrit un modèle de conception dans l'édition Kotlin Factory
Faisons un outil de veille de commande avec python