Ich habe ein CLI-Tool in der Sprache Go geschrieben, um Qiitas Tag-Feed in CLI anzuzeigen

Lesen Sie Zenns Artikel (Gehen Sie zum Sprachpaket, um den Feed zu erhalten) und [gofeed](https: // github) Ich fand heraus, dass es ein praktisches Tool namens .com / mmcdole / gofeed gibt, und wollte es berühren. Deshalb habe ich ein einfaches Tool erstellt, das nur den Qiita-Tag-Feed auf der CLI anzeigt.

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

Verwendung von qiita-tag-feed-reader-cli

Die Erklärung ist dieselbe wie README unter dem obigen Link, lautet jedoch wie folgt. ist.

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

#Zeigen Sie den Feed an, indem Sie Tags zufällig angeben
qiita-tag-feed-reader-cli

#Zeigen Sie den Feed des angegebenen Tags an(in diesem Fall"Go"Aber"go"AberOK)
qiita-tag-feed-reader-cli Go

#Natürlich können Sie auch Japanisch verwenden
qiita-tag-feed-reader-CLI-Sicherheit

Ich wollte Gofeed vollständig berühren, und es war ein Werkzeug, das ich zum Studium von Go selbst entwickelt habe, aber unerwartet wurde es zu einem Werkzeug, das in kurzer Freizeit, beispielsweise während des Bauens, verwendet werden kann. Deshalb werde ich es auch hier melden. Es hängt davon ab, was Sie erhalten haben. (Weil es vor allem mit "Qiita" zusammenhängt)

Die Quelle selbst ist sehr klein, daher denke ich, dass es am besten ist, den Quellcode direkt zu lesen, um herauszufinden, was Sie tun. Zur Zeit schreibe ich es jedoch in Qiita und werde die technischen Punkte aufschreiben (obwohl es nicht gesagt werden kann).

Ich werde nicht über Gofeed erklären

Darüber hinaus scheint der Chabudai nach bisherigem Sprechen auf den Kopf gestellt worden zu sein, aber die Verwendung von "Gofeed" selbst ist gofeed README. Ich werde es weglassen, weil es ein Level ist, das man verstehen kann, wenn man sich den oben veröffentlichten Zenn-Beitrag ansieht.

Früher habe ich einen Code geschrieben, um den erfassten Feed mit Go selbst zu analysieren, aber ich dachte, es wäre praktisch, wenn ich gofeed hätte, weil ich die gesamte Verarbeitung auf einmal überspringen könnte. Ein einfach zu bedienendes Tool.

Anzeige der für CLI eindeutigen Reihenfolge

Wie Sie sehen können, indem Sie den Befehl tatsächlich drücken, werden die Informationen in der folgenden Reihenfolge angezeigt. Dies liegt daran, dass es in der CLI verwendet wird, sodass sich die Sichtlinie von unten nach oben bewegt.

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

Informationen zum Feed

Ich wollte auch Gofeed verwenden, also bekomme ich einen Tag-Feed. Für diese Feed-URL habe ich auf den folgenden Qiita-Beitrag verwiesen.

[Qiita-Artikel / Benutzer / Organisation / Tag-Feed-URL (XML / ATOM-URL des Benutzers oder Tags, dem Sie folgen möchten) -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)

Verarbeitung zum Entfernen des HTML-Tags des erfassten HTML

Das Entfernen von HTML-Tags wird anhand des folgenden Codes implementiert. (In der Tat ist es fast das gleiche, außer dass es HTML-Kommentare unterstützt ...) https://gist.github.com/g10guang/04f11221dadf1ed019e0d3cf3e82caf3

Der Quellcode zum Entfernen von HTML-Tags, die tatsächlich in "qiita-tag-feed-reader-cli" geschrieben wurden, ist unten aufgeführt.

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
}

Als ich es beim Betrachten des Referenzcodes implementiert habe, dachte ich, dass es wahr ist. Wie Sie in den Kommentaren im obigen Code sehen können, werden die Zeichenfolgen in der Reihenfolge der längsten ersetzt.

Wenn Sie das Tag mit diesem regulären Ausdruck extrahieren, können Sie die folgenden zwei Muster von Tags als das erfasste Tag-Muster erhalten.

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

Wenn beim Ersetzen von HTML durch "strings.ReplaceAll" zuerst "</ span>" ersetzt wird, bleibt "</ span> </ div>" zurück. Ersetzen Sie ihn daher durch einen langen String. Ich versuche es zu tun. Dadurch werden alle HTML-Tags erfolgreich entfernt.

Eigentlich brauche ich auch einen Testcode, um dieses Verhalten richtig zu beweisen, aber ich wollte es schnell in Form bringen, also habe ich es seitwärts gelegt. Da es eine große Sache ist, werde ich zu einem späteren Zeitpunkt einen Testcode hinzufügen. → Hinzufügung: Ein Test wurde hinzugefügt.

Über den Teil, der zufällig das Tag von Qiita erhält

Dies ist kein technischer Punkt. Wenn Sie dieses Tool jedoch ohne Argumente ausführen, wird versucht, ein Qiita-Tag zufällig auszuwählen und den Feed anzuzeigen. Beziehen Sie sich für dieses Qiita-Tag auf den folgenden Code und erhalten Sie die Tags in der Reihenfolge ihrer Beliebtheit.

[(Verwenden der Qiita-API v2) So erhalten Sie Informationen zu Qiita-Tags über die API - Beispielcode, der ohne Angabe von Tags abgerufen werden kann](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)

Wie Sie vielleicht bereits aus dem Quellcode wissen, verwalte ich zum Zeitpunkt der Implementierung in der Go-Datei 100 beliebte Tags und rufe sie zur Laufzeit auf. Daher ist es in Form von ** zufällig ausgewählt aus den 100 beliebten Tags zum Zeitpunkt der Erstellung dieses Tools.

Natürlich ist es möglich, zum Zeitpunkt der Ausführung 100 Tags in Echtzeit auszuwählen, aber da dies ursprünglich der Zweck war, Gofeed zu testen, ist es hier vollständig horizontal. Ich denke auch, dass die Qiita-API sofort die Obergrenze erreicht, wenn sie nicht authentifiziert wird. Daher hatte ich auch das Gefühl, dass ich das nicht berücksichtigen wollte.

Ende

Also, wenn Sie möchten, verwenden Sie es bitte. Für mich passt die Einfachheit dieses Tools gut zu ein wenig Freizeit, und es ist zu einem Tool geworden, das die Zeit unerwartet töten kann. Auf jeden Fall, wie zum Beispiel Wartezeit für den Bau.

Als ich es tatsächlich benutzt habe ↓ qiita-tag-feed-reader-cli demo gif

Recommended Posts

Ich habe ein CLI-Tool in der Sprache Go geschrieben, um Qiitas Tag-Feed in CLI anzuzeigen
Ich habe ein CLI-Tool erstellt, um Bilder in jedem Verzeichnis in PDF zu konvertieren
Ich habe eine Art einfaches Bildverarbeitungswerkzeug in der Sprache Go erstellt.
Ich möchte mit einem Roboter in Python arbeiten.
Ich habe dir geschrieben, dass du das Signal mit Go sehen sollst
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Ich habe es in der Sprache Go geschrieben, um das SOLID-Prinzip zu verstehen
Ich habe ein Skript geschrieben, um eine beliebte Seite in Japan zu bekommen
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Made gomi, ein Papierkorb-Tool für rm in Go-Sprache
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe ein Skript geschrieben, mit dem Sie mit hoher Geschwindigkeit mit AtCoder beginnen können!
Ich habe eine Funktion zum Laden des Git-Erweiterungsskripts in Python geschrieben
Ich habe ein Skript geschrieben, um Webseiten-Links in Python zu extrahieren
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich habe einen Code geschrieben, um die Quaternion mit Python in einen Ölerwinkel vom Typ z-y-x umzuwandeln
Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.
(Matplotlib) Ich möchte ein Diagramm mit einer in Pixel angegebenen Größe zeichnen
Ich habe ein Tool erstellt, um Jupyter py mit VS Code in ipynb zu konvertieren
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
Hinweise Ich habe nachgeschlagen, um Befehlszeilentools in Python zu erstellen
Ich möchte in der Einschlussnotation drucken
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe ein Passwort-Tool in Python erstellt.
Ich habe ein Tool zum Korrigieren von GPS-Daten mit der Map Matching API von Mapbox (Mapbox Map Matching API) erstellt.
Beim Versuch, Hello World in der Sprache Go auszuführen, ist eine Fehlermeldung aufgetreten
Ich habe eine Burgsuch-API mit Elasticsearch + Sudachi + Go + Echo erstellt
Ich habe versucht, ein scheinbar Windows-Snipper-Tool mit Python zu implementieren
Ein Memo, das ich schnell in Python geschrieben habe
Ich möchte mit Python ein Fenster erstellen
Ich habe versucht, Keras in TFv1.1 zu integrieren
Ich möchte ein Spiel mit Python machen
Ich habe eine Klasse in Python3 und Java geschrieben
Klonen Sie mit einem bestimmten Zweig / Tag in GitPython
Ich habe ein Designmuster in der Kotlin Prototype Edition geschrieben
Ich habe ein Tool erstellt, um Hy nativ zu kompilieren
Ich habe mit Diamond gespielt, einem Tool zum Sammeln von Metriken
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich möchte mit Python in eine Datei schreiben
Ich habe versucht, eine Umgebung mit WSL + Ubuntu + VS-Code in einer Windows-Umgebung zu erstellen
Ich blieb stecken, als ich versuchte, einen relativen Pfad mit relative_to () in Python anzugeben
Ich habe versucht, eine Klasse für die Suche nach Dateien mit der Glob-Methode von Python in VBA zu erstellen
Ich habe Python-Code geschrieben, um ein Tabellen- (Ansichts-) Abhängigkeitsdiagramm (PlantUML) aus SQL zu erstellen
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Ich habe ein Designmuster in der Kotlin Factory Edition geschrieben
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen