[RUBY] Je veux représenter graphiquement le nombre de téléchargements de photos AC [coopération en anneau MySQL] ~ Codage de 10 lignes par jour ~

Jour 4

Dans la continuité d'hier, nous allons créer une partie de l'application graphique qui stocke réellement les données.

[Thème technique]

Environnement

Langue

Livrable cible

Aujourd'hui, je souhaite terminer la construction de l'environnement MySQL et stocker les informations précédentes dans la base de données.

Code et documentation

1. Installez MySQL

https://qiita.com/hkusu/items/cda3e8461e7a46ecf25d Exécutez la commande spécifiée en vous référant à cet article

[Commande d'exécution]

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

résultat

curl: (22) The requested URL returned error: 404 Not Found

C'était probablement inutile parce que les données référencées étaient anciennes ... J'ai pensé qu'il s'agissait d'une installation Homebrew et cela devrait être fait pour que je lance la prochaine partie d'installation de MySQL. [Commande d'exécution]

brew update
brew install mysql

L'installation est terminée avec juste ça! J'ai défini le mot de passe, etc., mais il semble qu'il ne soit plus facilement accessible depuis le récent pro de la séquence ....

ALTER USER 'Nom d'utilisateur'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mot de passe';

J'ai dû faire ce réglage.

2. Ajouter une bibliothèque

Afin de mettre des données dans MySQL, nous avons besoin d'une bibliothèque pour cela, alors ajoutez la ligne suivante au Gemfile.

gem 'activerecord'
gem 'mysql2', '0.5.2'

Dans cet état

bundle install --path .bundle Lorsque vous exécutez. J'ai une erreur

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"

Lorsque j'ai exécuté cette commande, j'ai pu l'installer sans aucun problème.

3. Stockage des données du journal

Tout d'abord, définissez une table pour stocker les données. Ce dont nous avons besoin cette fois, c'est de combien d'images sont téléchargées en quels jours, alors je me suis demandé si le tableau serait à peu près comme indiqué ci-dessous.

CREATE TABLE `logs` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `image_id` int DEFAULT NULL,
  `download` int DEFAULT NULL,
  `date` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

Modifiez ensuite le code du robot. Premièrement pour se connecter à MySQL

crawler.rb


require 'active_record'
require 'date'


#Traitement des connexions DB
ActiveRecord::Base.establish_connection(
  :adapter  => 'mysql2',
  :database => 'Nom de la base de données',
  :host     => 'localhost',
  :username => 'Nom d'utilisateur',
  :charset => 'utf8mb4',
  :encoding => 'utf8mb4',
  :collation => 'utf8mb4_general_ci',
  :password => 'mot de passe'
)

class Log < ActiveRecord::Base; end

Ajoutez le code ci-dessus. En plus de cela, la partie principale du processus d'analyse

crawler.rb


page = agent.get("https://www.photo-ac.com/creator/list/?pl_q=&pl_order=-releasedate&pl_pp=200&pl_disp=all&pl_ntagsec=&pl_tags50over=&pl_chkpsd=")
doc = Nokogiri::HTML.parse(page.body, nil, 'utf-8')
doc.css(".photo-list").each{|div|
  image_id =  div.css(".sectiondata li")[0].text.split(":")[1]
  download = div.css(".sectionimg .preview")[0].text
  Log.create({image_id:image_id,download:download,date:Date.today})
}

Réécrivez comme ça. Et si vous l'exécutez comme d'habitude, les données seront stockées correctement.

Ceci termine la partie collecte de données. (Ça fait un peu passé ...)

Recommended Posts

Je veux représenter graphiquement le nombre de téléchargements de photos AC [coopération en anneau MySQL] ~ Codage de 10 lignes par jour ~
Je veux représenter graphiquement le nombre de téléchargements de photos AC [Mise en œuvre du grattage] ~ 10 lignes par jour de codage ~
Je veux appeler une méthode et compter le nombre
Je veux var_dump le contenu de l'intention
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
[Rails] Je souhaite afficher la destination du lien de link_to dans un onglet séparé
Je veux appeler une méthode d'une autre classe
Je veux connaître la réponse de l'application Janken
Je souhaite afficher le nom de l'affiche du commentaire
Je veux retourner la position de défilement de UITableView!
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
Je veux obtenir une liste du contenu d'un fichier zip et sa taille non compressée
[Java] Je souhaite convertir un tableau d'octets en un nombre hexadécimal
Je souhaite créer un modèle spécifique d'ActiveRecord ReadOnly
Je souhaite modifier le paramètre de sortie du journal de UtilLoggingJdbcLogger
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
Je veux donner un nom de classe à l'attribut select
[Ruby] Je souhaite inverser l'ordre de la table de hachage
[Swift] Lorsque vous voulez savoir si le nombre de caractères dans String correspond à un certain nombre ...
J'ai essayé d'exprimer les résultats avant et après de la classe Date avec une ligne droite numérique
Je veux comprendre le flux des paramètres de demande de traitement Spring
L'histoire de Collectors.groupingBy que je veux garder pour la postérité
J'ai fait un petit bijou pour poster le texte du mode org sur qiita
Je veux limiter l'entrée en réduisant la plage de nombres
Je veux contrôler le message d'erreur par défaut de Spring Boot
J'ai créé un outil pour afficher la différence du fichier CSV
Je veux changer la valeur de l'attribut dans Selenium of Ruby
Codage 10 lignes par jour ~ Mise en œuvre du grattage ~
Un mémo lorsque vous souhaitez effacer la partie horaire de l'agenda
[Rails] Je souhaite envoyer des données de différents modèles dans un formulaire
Créer un mécanisme pour publier des réservations sur Qiita [Publication de réservation] ~ Codage de 10 lignes par jour ~ ~
Je veux connaître le JSP du portlet ouvert lors du développement de Liferay
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
Je veux passer l'argument d'Annotation et l'argument de la méthode d'appel à aspect
[Circle CI] J'étais accro au test automatique de Circle CI (rails + mysql) [Memo]
Je veux obtenir le nom de champ du champ [Java]. (Vieux ton d'histoire)
Je veux que vous utilisiez Enum # name () pour la clé de SharedPreference
Après tout, je voulais prévisualiser le contenu de mysql avec Docker ...
Je souhaite obtenir une liste de chaînes de caractères uniques uniquement en excluant les chaînes de caractères fixes du nom de fichier