/usr/share/tdiary/contrib/plugin/puboo.rb is in tdiary-contrib 5.0.8-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | # -*- coding: utf-8 -*-
# Copyright (C) 2013, TADA Tadashi <t@tdtds.jp>
# Original code from tatsu_zine.rb by KADO Masanori <kdmsnr@gmail.com>
# You can redistribute it and/or modify it under GPL.
#
# display book info in http://p.booklog.jp/ like amazon.rb
# USAGE: {{puboo 9999}}
require 'open-uri'
def puboo_cache_dir
cache = "#{@cache_path}/puboo"
Dir.mkdir( cache ) unless File.directory?( cache )
cache
end
def puboo_cache_set( id, result )
File.open( "#{puboo_cache_dir}/#{id}", "w" ) do |f|
f.write result
end
end
def puboo_cache_get( id )
File.open( "#{puboo_cache_dir}/#{id}", "r" ) do |f|
f.read
end
rescue
nil
end
def puboo( id, doc = nil )
if !@conf.secure and !(result = puboo_cache_get(id)).nil?
return result
end
link = "http://p.booklog.jp/book/#{id}"
doc ||= open( link ).read.force_encoding('UTF-8')
title = doc.match(%r|<meta property="og:title"\s*content="(.*)"|).to_a[1]
image = doc.match(%r|<meta property="og:image"\s*content="(.*)"|).to_a[1]
price = doc.match(%r|<th class="th_2">価格</th>.*?<span>(.*?)</span>.*?<br />|m).to_a[1]
author = doc.match(%r|<th>作者</th>(.*?)</td>|m).to_a[1].gsub(/<.*?>/, '').strip
result = <<-EOS
<a class="amazon-detail" href="#{h link}"><span class="amazon-detail">
<img class="amazon-detail left" src="#{h image}"
height="150" width="100"
alt="#{h title}">
<span class="amazon-detail-desc">
<span class="amazon-title">#{h title}</span><br>
<span class="amazon-author">#{h author}</span><br>
<span class="amazon-price">#{h price}</span>
</span><br style="clear: left">
</span></a>
EOS
puboo_cache_set( id, result ) unless @conf.secure
result
rescue
link
end
if __FILE__ == $0
require 'test/unit'
class TestTatsuZine < Test::Unit::TestCase
def setup
@conf = Struct.new("Conf", :secure).new(true)
def h(str); str; end
end
def test_puboo
expect = <<-EOS
<a class="amazon-detail" href="http://p.booklog.jp/book/70667"><span class="amazon-detail">
<img class="amazon-detail left" src="http://img.booklog.jp/667BDD9E-B13E-11E2-82F3-6425FFDA975F_l.jpg"
height="150" width="100"
alt="入門Puppet - Automate Your Infrastructure">
<span class="amazon-detail-desc">
<span class="amazon-title">入門Puppet - Automate Your Infrastructure</span><br>
<span class="amazon-author">栗林健太郎</span><br>
<span class="amazon-price">890円(税込)</span>
</span><br style="clear: left">
</span></a>
EOS
assert_equal expect, puboo('70667')
end
end
end
# Local Variables:
# mode: ruby
# indent-tabs-mode: t
# tab-width: 3
# ruby-indent-level: 3
# End:
|