[Go language] Collectez et enregistrez des images Vtuber à l'aide de l'API Twitter

introduction

Je souhaite enregistrer une photo de ma personne préférée ...

Actuellement, les peintres publient diverses images sur Twitter.

Je regarde souvent la photo de Vtuber, mais je pensais que c'était bien, je voulais la sauvegarder quelque part ...

J'ai remarqué que les images de Vtuber que je vois souvent sont souvent postées par des balises de hachage sur Twitter, et je me suis demandé si je pouvais faire quelque chose à ce sujet, alors j'ai créé un "outil de collecte" tout en enquêtant.

Obtenez des images en masse à l'aide de l'API Twitter

Au fait, j'aimerais reprendre ici mon "Pekora Usada" préféré.

Processus requis

・ Acquisition et authentification de l'API Twitter ・ Définissez les informations à collecter (tweets contenant la chaîne de caractères "#pekoratto", 100 acquisitions, etc.) ・ Création d'un fichier pour stocker les images enregistrées, etc. ・ Acquisition de l'URL de l'image ・ Enregistrer en tant que fichier jpg

Regardons chacun d'eux.

Acquisition et authentification de l'API Twitter

Veuillez accéder au site suivant et obtenir l'API Twitter.

>>> Obtenir l'API Twitter

Je vais omettre la méthode détaillée.

Je pense qu'il serait bon de le définir au début de la source.


const (
	consumerKey       = ""
	consumerSecret    = ""
	accessToken       = ""
	accessTokenSecret = ""
)

Définir les informations à collecter

ici,

Combien de tweets obtenir Comprend-il les retweets? N'incluez pas les tweets sans images

Définissez une requête telle que.


    v := url.Values{}
    v.Set("count", "100")
	query := "Pekora et OR#Pekora et exclure:retweets filter:images"
	searchResult, _ := api.GetSearch(query, v)

Ici, "count", qui signifie le nombre de tweets, est utilisé pour obtenir 100 tweets. Ensuite, supposons que la chaîne de caractères recherchée est "Pekorato" ou "#Pekorato". Seuls les tweets avec des images jointes, sans compter les retweets.

Point de défaillance

Je ne savais pas que je pouvais le placer dans cette partie, alors j'ai récupéré le contenu du tweet et j'ai jugé si le contenu de l'image en existait.

Création d'un fichier pour stocker l'image enregistrée

Si vous l'enregistrez normalement, il sera foiré, alors créez un dossier pour enregistrer l'image. Lors de la création d'un fichier json, il est préférable de créer un autre dossier.

Lorsque Mkdir est fait dans le code source suivant, le numéro 0777 est utilisé, qui décrit les permissions du fichier. 0: impossible de lire / écrire / exécuter 1: uniquement exécutable 2: écriture uniquement 3: Peut être écrit et exécuté 4: lecture seule 5: lisible et exécutable 6: Peut être lu et écrit 7: Lire, exécuter, écrire Alors pourquoi y a-t-il trois chiffres? Tu n'as pas pensé? C'est de haut en bas -Permissions du propriétaire (créateur) du fichier ou du répertoire -Permissions d'autres utilisateurs dans le même groupe que l'utilisateur créé ・ Privilèges des autres utilisateurs Cliquez ici pour les articles de référence

//Définir le répertoire actuel avec un chemin absolu
currentDir, err := filepath.Abs(".")
//Chdir est une commande en tant qu'image$Sentiment cd
    err = os.Chdir(currentDir)
	if err != nil {
		panic(err)
	}
//Vérifiez le dossier
	_, err = os.Stat("pekorato")
	if err != nil {
//Créez maintenant un dossier avec Mkdir
		err = os.Mkdir("pekorato", 0777)//0777 est expliqué en détail ci-dessus
		if err != nil {
			panic(err)
		}
	}
//Déplacez le répertoire et enregistrez les images ensemble ici
	err = os.Chdir(currentDir + "/pekorato")
	if err != nil {
		panic(err)
	}

Obtenir l'URL de l'image

Obtenir l'URL d'une image est également facile. Si vous omettez les détails, vous pouvez les collecter avec une ligne de code ci-dessous.

Inversement, vous pouvez obtenir des informations différentes en réécrivant après tweet. Par exemple, vous pouvez utiliser tweet.User.ProfileImageURL pour obtenir l'URL de l'image du profil de cet utilisateur.


mediaRawURL := tweet.ExtendedEntities.Media[0].Media_url_https

Enregistrer en tant que fichier jpg

Je pense que c'est plus une copie qu'une sauvegarde. Je fais http.Obtenez au début, mais cela nécessite un peu de connaissance de http. Qu'est-ce qui est renvoyé lorsque j'envoie la méthode get? Si vous ne le savez pas, vous devriez le vérifier.


        response, err := http.Get(mediaRawURL)
			if err != nil {
			panic(err)
		}
		defer response.Body.Close()

		//Générer un fichier jpg
		pekoPic, err := os.Create(fmt.Sprintf("pekora%d.jpg ", i))
		if err != nil {
			panic(err)
		}
		defer pekoPic.Close()

		//Copier dans pekoPic téléchargé
		io.Copy(pekoPic, response.Body)

Code source complet


package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
	"os"
	"path/filepath"

	"github.com/ChimeraCoder/anaconda"
)

//Veuillez entrer ici par vous-même.
const (
	consumerKey       = ""
	consumerSecret    = ""
	accessToken       = ""
	accessTokenSecret = ""
)

func main() {
	//Authentification Twitter
	anaconda.SetConsumerKey(consumerKey)
	anaconda.SetConsumerSecret(consumerSecret)

	//Authentification personnelle
	api := anaconda.NewTwitterApi(accessToken, accessTokenSecret)

	/*************
Paramètres de requête de recherche
	**************/
	v := url.Values{}
	v.Set("count", "100")
	query := "Pekora et OR#Pekora et exclure:retweets filter:images"
	searchResult, _ := api.GetSearch(query, v)

	/**********************************************
Créer un dossier pour enregistrer des images et déplacer des répertoires
	**********************************************/

	currentDir, err := filepath.Abs(".")
	if err != nil {
		panic(err)
	}

	_, err = os.Stat("pekorato")
	if err != nil {
		err = os.Mkdir("pekorato", 0777)
		if err != nil {
			panic(err)
		}
	}

	err = os.Chdir(currentDir + "/pekorato")
	if err != nil {
		panic(err)
	}

	/********************************
Analysez les tweets et générez des images
	********************************/

	for i, tweet := range searchResult.Statuses {
		mediaRawURL := tweet.ExtendedEntities.Media[0].Media_url_https

		response, err := http.Get(mediaRawURL)
		if err != nil {
			panic(err)
		}
		defer response.Body.Close()

		pekoPic, err := os.Create(fmt.Sprintf("pekora%d.jpg ", i))
		if err != nil {
			panic(err)
		}
		defer pekoPic.Close()

		io.Copy(pekoPic, response.Body)
	}
}

Sommaire

Cette fois, j'ai utilisé l'API Twitter pour obtenir l'image. Ensuite, j'ai pensé essayer de créer quelque chose comme obtenir l'image tweetée d'une personne spécifique. Ceux qui l'ont vu allaient bien.

Recommended Posts

[Go language] Collectez et enregistrez des images Vtuber à l'aide de l'API Twitter
Tweetez régulièrement avec l'API Twitter Go language
Enregistrez automatiquement les images et les vidéos touchées par la recherche Twitter sur l'iPhone à l'aide de Pythonista3
Collectez des images à l'aide d'icrawler
Recherchez et enregistrez l'image de Tomono Kafu depuis Twitter
J'ai essayé de collecter automatiquement des images érotiques de Twitter à l'aide de l'API Cloud Vision de GCP
Collectez un grand nombre d'images à l'aide de l'API de recherche d'images de Bing
Essayez d'utiliser l'API Twitter
Essayez d'utiliser l'API Twitter
Collectez les tweets en utilisant tweepy en Python et enregistrez-les dans MongoDB
Collectez des informations sur les produits et traitez les données à l'aide de l'API de recherche de produits Rakuten [Python]
Envoyer des messages et des images à l'aide de LineNotify
J'ai fait go language pour api et la configuration minimum de react pour le front
Achetez et vendez de la monnaie virtuelle à l'aide de l'API Zaif
Tweet à l'aide de l'API Twitter en Python
Générer des spécifications d'API à l'aide de GO / Gingin-swagger
Collectez des données à l'aide de scrapy et remplissez mongoDB
[Golang] À propos du producteur et consommateur de langue Go