[RUBY] publier dans la version de patch de Qiita

Version pour mettre à jour l'article déjà posté sur qiita

Il existe un enregistrement de la création de la version à publier en premier. De plus, c'est une version qui met à jour l'article déjà donné à qiita. Code ci-dessous

ruby post_final.rb post_final.org 

Vous pouvez faire quelque chose. Dans le premier message, créez-en un nouveau, puis écrivez l'ID des éléments dans org. S'il existe, il sera patché sur cet identifiant.

De plus, vous pouvez sélectionner «ouvrir» ou «équipes». la valeur par défaut est «privé».

ruby post_final.rb post_final.org teams

Quoi?

la clé est

code

require "net/https"
require "json"

def get_title_tags(src)
  $conts = File.read(src)
  title =  $conts.match(/\#\+(TITLE|title|Title): (.+)/)[2] || "tester"
  m = []
  tags = if m =  $conts.match(/\#\+(TAG|tag|Tag|tags|TAGS|Tags): (.+)/)
	   m[2].split(',').inject([]) do |l, c|
      l << {name: c.strip} #, versions: []}
    end
	 else
	   [{ name: "hoge"}] #, versions: [] }]
	 end
  p tags
  return title,tags
end

src = ARGV[0] || 'README.org'
title, tags = get_title_tags(src)
p title
p tags

system "emacs #{src} --batch -l ~/.emacs.d/site_lisp/ox-qmd -f org-qmd-export-to-markdown --kill"

lines = File.readlines(src.gsub('org','md'))

m = []
patch = false
if m = $conts.match(/\#\+qiita_id: (.+)/)
  qiita_id = m[1]
  patch = true
else
  qiita_id = ''
end


case ARGV[1]
when 'teams'
  qiita = 'https://nishitani.qiita.com/'
  p access_token = ENV['QIITA_TEAM_WRITE_TOKEN']
  private = false
when 'open'
  qiita = 'https://qiita.com/'
  p access_token = ENV['QIITA_WRITE_TOKEN']
  private = false
else
  qiita = 'https://qiita.com/'
  p access_token = ENV['QIITA_WRITE_TOKEN']
  private = true
end

params = {
  "body": lines.join, #"#tester",
  "private": private,
  "title": title,
  "tags": tags
}

if patch
  path = "api/v2/items/#{qiita_id}"
else
  path = 'api/v2/items'
end
p qiita+path
uri = URI.parse(qiita+path)

http_req = Net::HTTP.new(uri.host, uri.port)
http_req.use_ssl = uri.scheme === "https"

headers = {"Authorization" => "Bearer #{access_token}",
  "Content-Type" => "application/json"}
if patch
  res = http_req.patch(uri.path, params.to_json, headers)
else
  res = http_req.post(uri.path, params.to_json, headers)
end

p res.message

res_body = JSON.parse(res.body)
res_body.each do |key, cont|
  if key == 'rendered_body' or key == 'body'
    puts "%20s brabrabra..." % key
    next
  end
  print "%20s %s\n" % [key, cont]
end
system "open #{res_body["url"]}"
qiita_id =res_body["id"]
unless patch
  File.write(src,"#+qiita_id: #{qiita_id}\n"+$conts)
end

Eh bien, veuillez refactoriser.

Tâche

Si vous voulez le mettre à deux endroits avec open et teams, vous ne saurez pas lequel est lequel. Je me demande s'il peut être mis à jour automatiquement à ce moment-là. .. ..

Recommended Posts

publier dans la version de patch de Qiita
publier dans la version de patch de Qiita
Qiita premier message
[rails] Comment publier des images
Comment abaisser la version java
Comment vérifier la version JSF
J'ai fait un petit bijou pour poster le texte du mode org sur qiita
Comment utiliser HttpClient de Java (Post)
Créer un mécanisme pour publier des réservations sur Qiita [Publication de réservation] ~ Codage de 10 lignes par jour ~ ~