@@ -59,3 +59,7 @@ gem "nokogiri", "~> 1.18" | |||||
gem 'gollum' | gem 'gollum' | ||||
gem 'diff-lcs' | gem 'diff-lcs' | ||||
gem 'dotenv-rails' | |||||
gem 'whenever', require: false |
@@ -84,12 +84,16 @@ GEM | |||||
brakeman (7.0.2) | brakeman (7.0.2) | ||||
racc | racc | ||||
builder (3.3.0) | builder (3.3.0) | ||||
chronic (0.10.2) | |||||
concurrent-ruby (1.3.5) | concurrent-ruby (1.3.5) | ||||
connection_pool (2.5.3) | connection_pool (2.5.3) | ||||
crass (1.0.6) | crass (1.0.6) | ||||
date (3.4.1) | date (3.4.1) | ||||
diff-lcs (1.6.2) | diff-lcs (1.6.2) | ||||
dotenv (3.1.8) | dotenv (3.1.8) | ||||
dotenv-rails (3.1.8) | |||||
dotenv (= 3.1.8) | |||||
railties (>= 6.1) | |||||
drb (2.2.1) | drb (2.2.1) | ||||
ed25519 (1.4.0) | ed25519 (1.4.0) | ||||
erubi (1.13.1) | erubi (1.13.1) | ||||
@@ -396,6 +400,8 @@ GEM | |||||
base64 | base64 | ||||
websocket-extensions (>= 0.1.0) | websocket-extensions (>= 0.1.0) | ||||
websocket-extensions (0.1.5) | websocket-extensions (0.1.5) | ||||
whenever (1.0.0) | |||||
chronic (>= 0.6.3) | |||||
zeitwerk (2.7.2) | zeitwerk (2.7.2) | ||||
PLATFORMS | PLATFORMS | ||||
@@ -414,6 +420,7 @@ DEPENDENCIES | |||||
bootsnap | bootsnap | ||||
brakeman | brakeman | ||||
diff-lcs | diff-lcs | ||||
dotenv-rails | |||||
gollum | gollum | ||||
image_processing (~> 1.14) | image_processing (~> 1.14) | ||||
jwt | jwt | ||||
@@ -428,6 +435,7 @@ DEPENDENCIES | |||||
sqlite3 (>= 2.1) | sqlite3 (>= 2.1) | ||||
thruster | thruster | ||||
tzinfo-data | tzinfo-data | ||||
whenever | |||||
BUNDLED WITH | BUNDLED WITH | ||||
2.6.5 | 2.6.5 |
@@ -44,7 +44,7 @@ class PostsController < ApplicationController | |||||
# TODO: URL が正規のものがチェック,不正ならエラー | # TODO: URL が正規のものがチェック,不正ならエラー | ||||
title = params[:title] | title = params[:title] | ||||
post = Post.new(title: title, url: params[:url], thumbnail_base: '', uploaded_user: current_user) | |||||
post = Post.new(title:, url: params[:url], thumbnail_base: '', uploaded_user: current_user) | |||||
post.thumbnail.attach(params[:thumbnail]) | post.thumbnail.attach(params[:thumbnail]) | ||||
if post.save | if post.save | ||||
post.resized_thumbnail! | post.resized_thumbnail! | ||||
@@ -0,0 +1,3 @@ | |||||
every 1.day, at: '3:00 pm' do | |||||
rake 'nico:sync', environment: 'production' | |||||
end |
@@ -0,0 +1,35 @@ | |||||
namespace :nico do | |||||
desc 'ニコニコ DB 同期' | |||||
task sync: :environment do | |||||
require 'open3' | |||||
mysql_user = ENV['MYSQL_USER'] | |||||
mysql_pass = ENV['MYSQL_PASS'] | |||||
nizika_nico_path = ENV['NIZIKA_NICO_PATH'] | |||||
stdout, stderr, status = Open3.capture3( | |||||
{ 'MYSQL_USER' => mysql_user, 'MYSQL_PASS' => mysql_pass }, | |||||
'python3', "#{ nizika_nico_path }/get_videos.py") | |||||
if status.success? | |||||
data = JSON.parse(stdout) | |||||
data.each do |datum| | |||||
post = Post.where('url LIKE ?', '%nicovideo.jp%').find { |post| | |||||
post.url =~ %r{#{ Regexp.escape(datum['code']) }(?!\d)} | |||||
} | |||||
unless post | |||||
title = datum['title'] | |||||
url = "https://www.nicovideo.jp/watch/#{ datum['code'] }" | |||||
post = Post.new(title:, url:, thumbnail_base: '', uploaded_user: nil) | |||||
post.save! | |||||
end | |||||
post.tags.destroy(post.tags.where(category: 'nico')) | |||||
datum['tags'].each do |name| | |||||
name = "nico:#{ name }" | |||||
tag = Tag.find_or_initialize_by(name:, category: 'nico') | |||||
post.tags << tag | |||||
end | |||||
end | |||||
end | |||||
end | |||||
end | |||||