Edited at

【毎日自動更新】昨日投稿された Qiita Advent Calendar まとめ【しません】

More than 1 year has passed since last update.


はじめに

2016年 Qiita Advent Calendar に投稿された記事の当日分の一覧が見たいと思い、自動投稿されるようにしました。(してない)


仕組み

コードを抜粋するとこんな感じです。

分かりやすいように実際のコードから少し改変しています。

1.mechanize で Advent Calendar をスクレイピング


scraping.rb

data = []

# めんどくさいのでハードコーディング
1.upto(24) do |i|
agent = Mechanize.new
# 1ページごとにスクレイピング
page = agent.get("http://qiita.com/advent-calendar/2016/calendars?page=#{i}")
page.search('//td[@class="adventCalendarList_calendarTitle"]/a').each do |calendar|
# 各アドベントカレンダーに遷移
detail = page.link_with(:href => calendar[:href]).click
detail.search('.adventCalendarItem').each do |item|
next if item.at('.adventCalendarItem_date').text !~ /^12 \/ #{@day}$/
entry = item.at('.adventCalendarItem_entry/a')
next if entry.nil?
data << {
title: entry.text,
url: entry[:href]
}
end
end
end

2.ERB を利用してQiitaに投稿するための本文を整形する


post.rb

# 投稿用テンプレートに変数をバインド

template = ERB.new(open(File.dirname(__FILE__) + '/template.erb').read, nil, '-')
body = template.result(binding)

3.qiita-rb でQiitaに投稿する


post.rb

client = Qiita::Client.new(access_token: ENV['QIITA_TOKEN'])

client.post(
"/api/v2/items",
title: "【毎日自動更新】昨日投稿された Qiita Advent Calendar まとめ【しません】",
body: body, # 2.で生成した本文
private: true,
tags: [{"name": "qiita"}]
)

で、実際にやってみるとすごい件数が並んでめちゃくちゃ読みにくいという…。

なので毎日自動実行するのはやめて、今回手動で実行した結果だけアップしたいと思います。

なお、記事へのゴミリンクが残ってしまうので、URLは後で消す予定です。(スパムみたいな感じになってしまってすみません…)

URLは消しました。

Qiita に Advent Calendar への投稿一覧が見れるタブが追加されたら嬉しいです :bow:

みなさん、よい Advent Calendar を!