🖥
自分のQiitaの記事を全てzennにコピーする ( Rubyスクリプト )
概要
- QiitaAPIでQiitaの記事内容を取得する (APIの申請が必要)
- ZennとGithub連携しているレポジトリにlocalファイルを作成する
- git push してZennに記事を反映する
実行例
USER_ID=xxxx QIITA_TOKEN=********************** ruby qiita-to-zenn.rb
コード例
require 'net/https'
require 'uri'
require 'json'
uri = URI.parse("https://qiita.com/")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request_header = {'Content-Type' =>'application/json', "Authorization" => "Bearer #{ENV['QIITA_TOKEN']}"}
round = 0
# ページングしながらQiitaの全記事を取得
(1..100).each do |i|
get_url = "https://qiita.com/api/v2/users/#{ENV['USER_ID']}/items?page=#{i}&per_page=100"
get_request = Net::HTTP::Get.new(get_url, request_header)
get_response = http.request(get_request)
items = JSON.parse(get_response.response.body)
if items.empty?
break
end
items.each do |item|
round += 1
puts "#{round} #{item['url']}"
puts "#{item['title']} (#{item['body'].length}文字)"
omitted_title = item['title'].slice(0..69)
# 複数回実行しても記事が重複しないようにQiitaの記事作成日時をslugとして利用する
slug = item['created_at'].gsub(':', '_').gsub('+', '-').gsub('T', 't')
filepath = "../articles/qiita-#{slug}.md"
puts filepath
# Qiitaのタグをそのままzennで使う
tag_names = item['tags'].map { |tag| tag['name'] }
# Qiitaでポエムタグがついている記事はideaに、そうでない記事はtechに分類する
type = if tag_names.include?('ポエム')
'idea'
else
'tech'
end
filebody = <<~EOM
---
title: #{omitted_title.to_json}
emoji: "🖥"
type: "#{type}"
topics: #{tag_names}
published: true
---
#{item['body']}
EOM
# puts filebody
file = File.open(filepath, "w")
file.write(filebody)
file.close
end
sleep 1
end
動作例
git push するとすごい勢いでzennに記事が作成されてゆく
(1秒に2-3記事ぐらい)
注意
Githubからzennの記事を削除することは出来ないので注意
エラー
yamlでタイトルに構文エラーがあるとエラーが起こって途中で反映が止まる
上記スクリプトでは文字エスケープをして対策済み
例:
配列になってしまっている
title: [あいうえお]
本文の文字数エラー
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
Discussion