[RUBY] Créer un mécanisme pour publier des réservations sur Qiita [Publication de réservation] ~ Codage de 10 lignes par jour ~ ~

Jour 9

Je voudrais développer à partir de la dernière fois et créer un mécanisme pour publier automatiquement sur Qiita.

[Thème technique]

Publication automatique sur Qiita

Langue

Livrable cible

Publiez automatiquement votre propre brouillon de Qiita à la date prévue

Code et documentation

Frustration

J'ai fait de mon mieux avec la mécanisation jusqu'à la dernière fois, mais je ne pouvais pas faire de message, alors j'ai abandonné et j'ai décidé d'utiliser le sélénium interdit ... Veuillez noter que seulement .....

Complétez jusqu'à la dernière fois avec du sélénium à une vitesse explosive

Cependant, si vous utilisez du sélénium, vous pouvez vraiment jouer les muscles du cerveau sans utiliser votre tête ... Parce que JS peut être utilisé ...

Gemfile

gem 'selenium-webdriver'

Ajoutez ce qui précède à votre Gemfile

crawler.rb


require 'nokogiri'
require 'mechanize'
require 'selenium-webdriver'

def selemium_init
  ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
  # caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => { args: ["--user-agent=#{ua}", 'window-size=1280x800', '--incognito'] }) #Mode secret
  caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => {args: ["--headless","--no-sandbox", "--disable-setuid-sandbox", "--disable-gpu", "--user-agent=#{ua}", 'window-size=1280x800']})
  
  client = Selenium::WebDriver::Remote::Http::Default.new
  driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps  
end

driver = selemium_init
driver.navigate.to 'https://qiita.com/login'
driver.execute_script("document.getElementsByName('identity')[0].value = 'adresse mail'")
driver.execute_script("document.getElementsByName('password')[0].value = 'mot de passe'")
driver.execute_script("document.getElementsByName('commit')[0].click()")
sleep 1
driver.navigate.to 'https://qiita.com/drafts'

Tout ce que vous avez à faire est de vous connecter et d'accéder à la page de brouillon ... Déjà, c'est le travail lol

Mise en œuvre de la comparaison de dates à l'affichage réservé

Si vous ajoutez une fonction pour y publier un article et comparer les dates ...

crawler.rb


require 'nokogiri'
require 'mechanize'
require 'selenium-webdriver'

def selemium_init
  ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
  # caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => { args: ["--user-agent=#{ua}", 'window-size=1280x800', '--incognito'] }) #Mode secret
  caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => {args: ["--headless","--no-sandbox", "--disable-setuid-sandbox", "--disable-gpu", "--user-agent=#{ua}", 'window-size=1280x800']})
  
  client = Selenium::WebDriver::Remote::Http::Default.new
  driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps  
end

driver = selemium_init
driver.navigate.to 'https://qiita.com/login'
driver.execute_script("document.getElementsByName('identity')[0].value = 'adresse mail'")
driver.execute_script("document.getElementsByName('password')[0].value = 'mot de passe'")
driver.execute_script("document.getElementsByName('commit')[0].click()")
sleep 1
driver.navigate.to 'https://qiita.com/drafts'

doc = Nokogiri::HTML.parse(driver.page_source, nil, 'utf-8')
json = JSON.parse(doc.css('.js-react-on-rails-component')[1].inner_html)
json['creating_draft_items'].each do |item|
  if item['raw_body'].match(/Publication de réservation/)
    date = item['raw_body'].split('Publication de réservation:')[1]
    #S'il y a une date d'enregistrement de réservation
    if Date.today == Date.parse(date)
      driver.navigate.to "https://qiita.com/drafts/#{item['item_uuid']}/edit?resume=true"
      element = driver.find_element(:class, 'editorSubmit_dropdownToggle')
      element.click
      element = driver.find_elements(:class,'editorSubmit_dropdownItem')[2]
      element.click
      submit_element = driver.find_element(:class,'editorSubmit_submitBtnLabel')
      submit_element.click
      label_element = driver.find_element(:class,'creatingModal_label')
      label_element.click
      button_element = driver.find_elements(:class,'btn-primary')[-1]
      button_element.click
      end
  end
end

C'est tout ce qu'on peut en dire. Si vous exécutez ce lot vers 20h00 tous les jours, il sera publié automatiquement à 20h00 ....

Essayez de configurer cron sur le serveur et de l'exécuter! !! !! !! (Je vais essayer le poste réservé dans cet article lol)

→ Non .. j'ai remarqué une erreur vraiment stupide ... Cet article a été mis en perspective car je suis aussi allé sur la source avec les lettres attachées au poste de réservation ....

Poste de réservation: 2020-06-12

Recommended Posts

Créer un mécanisme pour publier des réservations sur Qiita [Publication de réservation] ~ Codage de 10 lignes par jour ~ ~
Créer un mécanisme pour publier des réservations sur Qiita [Projet d'acquisition] ~ Codage de 10 lignes par jour ~ ~
Codage 10 lignes par jour ~ Mise en œuvre du grattage ~
Codage 10 lignes par jour ~ Construction de l'environnement de grattage ~
publier dans la version de patch de Qiita
publier dans la version de patch de Qiita
Comment créer une méthode
J'ai fait un petit bijou pour poster le texte du mode org sur qiita
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 ~