tdiary-contrib 3.2.2.20130518

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +13 -0
  5. data/Gemfile.lock +35 -0
  6. data/README.en.md +12 -0
  7. data/README.md +13 -0
  8. data/Rakefile +41 -0
  9. data/doc/en/filter/spambayes.txt +3 -0
  10. data/doc/en/plugin.txt +1 -0
  11. data/doc/en/style/hatena.txt +10 -0
  12. data/doc/en/style/markdown.txt +16 -0
  13. data/doc/en/util.txt +1 -0
  14. data/doc/ja/filter/antirefspam.history.txt +59 -0
  15. data/doc/ja/filter/antirefspam.txt +86 -0
  16. data/doc/ja/filter/comment_key.ja.html +182 -0
  17. data/doc/ja/filter/spambayes.txt +3 -0
  18. data/doc/ja/plugin/add_bookmark.txt +50 -0
  19. data/doc/ja/plugin/category_to_tag.txt +21 -0
  20. data/doc/ja/plugin/cocoment.txt +31 -0
  21. data/doc/ja/plugin/google_adsense.txt +25 -0
  22. data/doc/ja/plugin/google_analytics.txt +7 -0
  23. data/doc/ja/plugin/image_detail.txt +69 -0
  24. data/doc/ja/plugin/image_gps.txt +36 -0
  25. data/doc/ja/plugin/image_gps2.txt +41 -0
  26. data/doc/ja/plugin/livedoor_weather.txt +105 -0
  27. data/doc/ja/plugin/opensearch_ad.txt +16 -0
  28. data/doc/ja/plugin/section_footer.txt +84 -0
  29. data/doc/ja/plugin/select_theme.txt +1 -0
  30. data/doc/ja/plugin.txt +13 -0
  31. data/doc/ja/style/hatena.txt +10 -0
  32. data/doc/ja/style/markdown.txt +13 -0
  33. data/doc/ja/util.txt +12 -0
  34. data/filter/antirefspam.rb +263 -0
  35. data/filter/commentkey.rb +29 -0
  36. data/filter/commentsize.rb +18 -0
  37. data/filter/hidecomment.rb +13 -0
  38. data/filter/iplookup.rb +55 -0
  39. data/filter/plugin/antirefspam.rb +59 -0
  40. data/filter/plugin/commentkey.rb +58 -0
  41. data/filter/plugin/commentsize.rb +12 -0
  42. data/filter/plugin/en/iplookup.rb +9 -0
  43. data/filter/plugin/en/spambayes.rb +123 -0
  44. data/filter/plugin/iplookup.rb +39 -0
  45. data/filter/plugin/ja/antirefspam.rb +91 -0
  46. data/filter/plugin/ja/commentkey.rb +17 -0
  47. data/filter/plugin/ja/commentsize.rb +6 -0
  48. data/filter/plugin/ja/iplookup.rb +9 -0
  49. data/filter/plugin/ja/spambayes.rb +124 -0
  50. data/filter/plugin/spambayes.rb +501 -0
  51. data/filter/plugin/zh/iplookup.rb +9 -0
  52. data/filter/rblcheck.rb +36 -0
  53. data/filter/spambayes.rb +535 -0
  54. data/filter/spamlookup.rb +37 -0
  55. data/io/dbi_io/ChangeLog +19 -0
  56. data/io/dbi_io/README.ja +39 -0
  57. data/io/dbi_io/dbi_io.rb +181 -0
  58. data/io/dbi_io/plugin/refererDbiIO.rb +76 -0
  59. data/io/dbi_io/tdiary_table.sql +42 -0
  60. data/js/appstore.js +109 -0
  61. data/js/datepicker.js +69 -0
  62. data/js/editor.js +82 -0
  63. data/js/flickr.js +157 -0
  64. data/js/image_ex.js +79 -0
  65. data/js/jquery.socialbutton.js +842 -0
  66. data/js/nicovideo.js +17 -0
  67. data/js/picasa.js +322 -0
  68. data/js/plugin_checker.js +71 -0
  69. data/js/prettify/lang-apollo.js +2 -0
  70. data/js/prettify/lang-clj.js +18 -0
  71. data/js/prettify/lang-css.js +2 -0
  72. data/js/prettify/lang-go.js +1 -0
  73. data/js/prettify/lang-hs.js +2 -0
  74. data/js/prettify/lang-lisp.js +3 -0
  75. data/js/prettify/lang-lua.js +2 -0
  76. data/js/prettify/lang-ml.js +2 -0
  77. data/js/prettify/lang-n.js +4 -0
  78. data/js/prettify/lang-proto.js +1 -0
  79. data/js/prettify/lang-scala.js +2 -0
  80. data/js/prettify/lang-sql.js +2 -0
  81. data/js/prettify/lang-tex.js +1 -0
  82. data/js/prettify/lang-vb.js +2 -0
  83. data/js/prettify/lang-vhdl.js +3 -0
  84. data/js/prettify/lang-wiki.js +2 -0
  85. data/js/prettify/lang-xq.js +3 -0
  86. data/js/prettify/lang-yaml.js +2 -0
  87. data/js/prettify/prettify.css +1 -0
  88. data/js/prettify/prettify.js +28 -0
  89. data/js/referer.js +17 -0
  90. data/js/show_and_hide.js +39 -0
  91. data/js/socialbutton.js +126 -0
  92. data/js/twitter_anywhere.js +28 -0
  93. data/js/yahoo_kousei.js +21 -0
  94. data/lib/bayes/convert.rb +34 -0
  95. data/lib/bayes.rb +232 -0
  96. data/lib/exifparser/BUGS +1 -0
  97. data/lib/exifparser/ChangeLog +169 -0
  98. data/lib/exifparser/README +15 -0
  99. data/lib/exifparser/install.rb +1015 -0
  100. data/lib/exifparser/lib/exifparser/makernote/canon.rb +502 -0
  101. data/lib/exifparser/lib/exifparser/makernote/fujifilm.rb +415 -0
  102. data/lib/exifparser/lib/exifparser/makernote/minolta.rb +84 -0
  103. data/lib/exifparser/lib/exifparser/makernote/mk_nikonflensname.rb +39 -0
  104. data/lib/exifparser/lib/exifparser/makernote/nikon.rb +267 -0
  105. data/lib/exifparser/lib/exifparser/makernote/nikon2.rb +581 -0
  106. data/lib/exifparser/lib/exifparser/makernote/nikonflensname.rb +438 -0
  107. data/lib/exifparser/lib/exifparser/makernote/olympus.rb +225 -0
  108. data/lib/exifparser/lib/exifparser/makernote/prove.rb +84 -0
  109. data/lib/exifparser/lib/exifparser/makernote/sigma.rb +237 -0
  110. data/lib/exifparser/lib/exifparser/pre-setup.rb +1 -0
  111. data/lib/exifparser/lib/exifparser/scan.rb +278 -0
  112. data/lib/exifparser/lib/exifparser/tag.rb +2298 -0
  113. data/lib/exifparser/lib/exifparser/thumbnail.rb +76 -0
  114. data/lib/exifparser/lib/exifparser/utils.rb +88 -0
  115. data/lib/exifparser/lib/exifparser.rb +265 -0
  116. data/lib/exifparser/sample/exifview.rb +279 -0
  117. data/lib/tdiary-contrib.rb +19 -0
  118. data/lib/wgs2tky.rb +93 -0
  119. data/misc/section_footer2/buzzurl.yaml +6 -0
  120. data/misc/section_footer2/fc2.yaml +6 -0
  121. data/misc/section_footer2/ldc.yaml +6 -0
  122. data/misc/section_footer2/retweet.yaml +7 -0
  123. data/misc/section_footer2/twitter.yaml +7 -0
  124. data/misc/section_footer2/yahoo.yaml +6 -0
  125. data/misc/tdiarygraph/tdiarygraph120x90e.swf +0 -0
  126. data/misc/tdiarygraph/tdiarygraph125x125e.swf +0 -0
  127. data/misc/tdiarygraph/tdiarygraph240x180e.swf +0 -0
  128. data/misc/tdiarygraph/tdiarygraph468x60e.swf +0 -0
  129. data/misc/tdiarygraph/tdiarygraph728x90e.swf +0 -0
  130. data/misc/tdiarytimes/tdiarytimes125x125r.swf +0 -0
  131. data/misc/tdiarytimes/tdiarytimes125x125r7.swf +0 -0
  132. data/misc/tdiarytimes/tdiarytimes125x125s.swf +0 -0
  133. data/misc/tdiarytimes/tdiarytimes125x30.swf +0 -0
  134. data/misc/tdiarytimes/tdiarytimes234x30.swf +0 -0
  135. data/misc/tdiarytimes/tdiarytimes468x30.swf +0 -0
  136. data/plugin/add_bookmark.rb +89 -0
  137. data/plugin/apple_webclip.rb +26 -0
  138. data/plugin/appstore.rb +47 -0
  139. data/plugin/bigpresen.rb +86 -0
  140. data/plugin/bitly.rb +39 -0
  141. data/plugin/bootstrap-navi.rb +54 -0
  142. data/plugin/canonical.rb +9 -0
  143. data/plugin/category_similar.rb +73 -0
  144. data/plugin/category_to_tag.rb +60 -0
  145. data/plugin/category_to_tagcloud.rb +172 -0
  146. data/plugin/cocomment.rb +37 -0
  147. data/plugin/code-prettify.rb +23 -0
  148. data/plugin/coderwall.rb +34 -0
  149. data/plugin/datepicker.rb +28 -0
  150. data/plugin/day2section.rb +20 -0
  151. data/plugin/del_footer.rb +111 -0
  152. data/plugin/description_from_body.rb +23 -0
  153. data/plugin/development.rb +16 -0
  154. data/plugin/editor.rb +11 -0
  155. data/plugin/en/add_bookmark.rb +20 -0
  156. data/plugin/en/del_footer.rb +10 -0
  157. data/plugin/en/git-register.rb +3 -0
  158. data/plugin/en/livedoor_weather.rb +25 -0
  159. data/plugin/en/microsummary.rb +18 -0
  160. data/plugin/en/nicovideo.rb +38 -0
  161. data/plugin/en/openid.rb +8 -0
  162. data/plugin/en/section_footer.rb +6 -0
  163. data/plugin/en/section_footer2.rb +3 -0
  164. data/plugin/en/socialbutton.rb +5 -0
  165. data/plugin/everytrail.rb +39 -0
  166. data/plugin/facebook_comments.rb +59 -0
  167. data/plugin/flickr.rb +209 -0
  168. data/plugin/gist.rb +16 -0
  169. data/plugin/git-register.rb +240 -0
  170. data/plugin/github_badge.rb +27 -0
  171. data/plugin/github_link.rb +9 -0
  172. data/plugin/goo_gl.rb +42 -0
  173. data/plugin/google_adsense.rb +132 -0
  174. data/plugin/google_analytics.rb +39 -0
  175. data/plugin/google_map.rb +168 -0
  176. data/plugin/google_sitemaps.rb +60 -0
  177. data/plugin/google_webmaster.rb +22 -0
  178. data/plugin/hatena_bookmark_nocomment.rb +9 -0
  179. data/plugin/hatena_star.rb +66 -0
  180. data/plugin/hb_footer.rb +255 -0
  181. data/plugin/hb_footer4sec.rb +244 -0
  182. data/plugin/hb_footer4sec_js.rb +30 -0
  183. data/plugin/hide_comment_form.rb +4 -0
  184. data/plugin/hide_sidebar_iphone.rb +21 -0
  185. data/plugin/iddy.rb +81 -0
  186. data/plugin/image_detail.rb +143 -0
  187. data/plugin/image_ex.rb +462 -0
  188. data/plugin/image_gps.rb +128 -0
  189. data/plugin/inline_wiki.rb +6 -0
  190. data/plugin/instagr.rb +64 -0
  191. data/plugin/ja/add_bookmark.rb +20 -0
  192. data/plugin/ja/del_footer.rb +10 -0
  193. data/plugin/ja/flickr.rb +62 -0
  194. data/plugin/ja/git-register.rb +3 -0
  195. data/plugin/ja/google_sitemaps.rb +35 -0
  196. data/plugin/ja/livedoor_weather.rb +25 -0
  197. data/plugin/ja/microsummary.rb +18 -0
  198. data/plugin/ja/nicovideo.rb +41 -0
  199. data/plugin/ja/openid.rb +7 -0
  200. data/plugin/ja/section_footer.rb +6 -0
  201. data/plugin/ja/section_footer2.rb +4 -0
  202. data/plugin/ja/socialbutton.rb +6 -0
  203. data/plugin/jdate.rb +20 -0
  204. data/plugin/jholiday.rb +16 -0
  205. data/plugin/jmonth.rb +20 -0
  206. data/plugin/jquery_ui_theme.rb +55 -0
  207. data/plugin/jroku.rb +28 -0
  208. data/plugin/jyear.rb +37 -0
  209. data/plugin/latlonglab_route.rb +25 -0
  210. data/plugin/lazy_referer.rb +38 -0
  211. data/plugin/livedoor_weather.rb +180 -0
  212. data/plugin/make_link.rb +44 -0
  213. data/plugin/makerss_category.rb +43 -0
  214. data/plugin/makerss_comment.rb +35 -0
  215. data/plugin/microsummary.rb +62 -0
  216. data/plugin/mm_footer.rb +215 -0
  217. data/plugin/monthly_autopagerize.rb +67 -0
  218. data/plugin/my_hotentry.rb +132 -0
  219. data/plugin/navi_day.rb +118 -0
  220. data/plugin/navi_this_month.rb +15 -0
  221. data/plugin/nicovideo.rb +115 -0
  222. data/plugin/notify_miniblog.rb +134 -0
  223. data/plugin/ogp.rb +55 -0
  224. data/plugin/ohmsha_estore.rb +71 -0
  225. data/plugin/openid.rb +90 -0
  226. data/plugin/opensearch_ad.rb +33 -0
  227. data/plugin/picasa.rb +56 -0
  228. data/plugin/plugin_checker.rb +41 -0
  229. data/plugin/popit.rb +22 -0
  230. data/plugin/prettify.rb +19 -0
  231. data/plugin/prezi.rb +10 -0
  232. data/plugin/profile.rb +222 -0
  233. data/plugin/puboo.rb +93 -0
  234. data/plugin/pygments_css.rb +76 -0
  235. data/plugin/rating.rb +419 -0
  236. data/plugin/recent_estraier.rb +50 -0
  237. data/plugin/recent_tweet.rb +71 -0
  238. data/plugin/retweet.rb +86 -0
  239. data/plugin/rubykaigi.rb +99 -0
  240. data/plugin/search-bing.rb +87 -0
  241. data/plugin/search-default.rb +264 -0
  242. data/plugin/search-google-custom.rb +60 -0
  243. data/plugin/search-yahoo-websearch.rb +121 -0
  244. data/plugin/search-yahoo.rb +109 -0
  245. data/plugin/section_footer.rb +195 -0
  246. data/plugin/section_footer2.rb +278 -0
  247. data/plugin/section_permalink.rb +73 -0
  248. data/plugin/section_permalink_anchor.rb +39 -0
  249. data/plugin/select_style.rb +42 -0
  250. data/plugin/select_theme.rb +90 -0
  251. data/plugin/show_and_hide.rb +77 -0
  252. data/plugin/slideshare.rb +10 -0
  253. data/plugin/socialbutton.rb +60 -0
  254. data/plugin/tatsu_zine.rb +93 -0
  255. data/plugin/tdiarygraph_flashstyle.rb +296 -0
  256. data/plugin/tdiarytimes.rb +166 -0
  257. data/plugin/tdiarytimes2.rb +406 -0
  258. data/plugin/tdiarytimes_flashstyle.rb +263 -0
  259. data/plugin/tdiarytimes_textstyle.rb +290 -0
  260. data/plugin/title_anchor.rb +16 -0
  261. data/plugin/tweet_quote.rb +106 -0
  262. data/plugin/twitpic.rb +10 -0
  263. data/plugin/twitter.rb +46 -0
  264. data/plugin/twitter_anywhere.rb +209 -0
  265. data/plugin/twitter_badge.rb +42 -0
  266. data/plugin/twitter_js.rb +59 -0
  267. data/plugin/ustream.rb +19 -0
  268. data/plugin/vimeo.rb +14 -0
  269. data/plugin/volatile.rb +89 -0
  270. data/plugin/vote.rb +100 -0
  271. data/plugin/wikiloc.rb +27 -0
  272. data/plugin/windex.rb +512 -0
  273. data/plugin/yahoo_kousei.rb +79 -0
  274. data/plugin/yahoo_map.rb +97 -0
  275. data/plugin/youtube.rb +33 -0
  276. data/plugin/yshop.rb +189 -0
  277. data/plugin/zenback.rb +46 -0
  278. data/spec/apple_webclip_spec.rb +46 -0
  279. data/spec/fixtures/friendfeed.xml +2 -0
  280. data/spec/fixtures/github.json +1 -0
  281. data/spec/fixtures/twitter.xml +73 -0
  282. data/spec/gist_spec.rb +16 -0
  283. data/spec/github_link_spec.rb +39 -0
  284. data/spec/google_analytics_spec.rb +60 -0
  285. data/spec/jdate_spec.rb +23 -0
  286. data/spec/jmonth_spec.rb +28 -0
  287. data/spec/jyear_spec.rb +21 -0
  288. data/spec/my_hotentry_spec.rb +78 -0
  289. data/spec/openid_spec.rb +246 -0
  290. data/spec/opensearch_ad_spec.rb +50 -0
  291. data/spec/profile_spec.rb +88 -0
  292. data/spec/rcov.opts +2 -0
  293. data/spec/spec_helper.rb +223 -0
  294. data/spec/title_anchor_spec.rb +39 -0
  295. data/spec/twitter_js_spec.rb +116 -0
  296. data/spec/youtube_spec.rb +20 -0
  297. data/style/hatena_style.rb +1011 -0
  298. data/style/markdown_style.rb +239 -0
  299. data/style/wikiext_style.rb +21 -0
  300. data/tdiary-contrib.gemspec +25 -0
  301. data/util/clean-spam/README.ja +1 -0
  302. data/util/clean-spam/tdiary-comment-clean +46 -0
  303. data/util/clean-spam/tdiary-comment-clean2 +81 -0
  304. data/util/clean-spam/tdiary-referer-clean +46 -0
  305. data/util/convert_pstore.rb +82 -0
  306. data/util/estraier-search/ChangeLog +36 -0
  307. data/util/estraier-search/README.ja +114 -0
  308. data/util/estraier-search/en/estraier-register.rb +3 -0
  309. data/util/estraier-search/estraier-register.rb +298 -0
  310. data/util/estraier-search/estraier-search.rb +273 -0
  311. data/util/estraier-search/estraier.rhtml +73 -0
  312. data/util/estraier-search/estraier.rxml +23 -0
  313. data/util/estraier-search/i.estraier.rhtml +31 -0
  314. data/util/estraier-search/ja/estraier-register.rb +3 -0
  315. data/util/image-gallery/README.ja +27 -0
  316. data/util/image-gallery/image-gallery.rb +523 -0
  317. data/util/image-gallery/image-gallery.rb.euc-jp +523 -0
  318. data/util/image-gallery/js/SmoothGallery/Changelog +52 -0
  319. data/util/image-gallery/js/SmoothGallery/css/ReMooz.css +186 -0
  320. data/util/image-gallery/js/SmoothGallery/css/img/carrow1.gif +0 -0
  321. data/util/image-gallery/js/SmoothGallery/css/img/carrow2.gif +0 -0
  322. data/util/image-gallery/js/SmoothGallery/css/img/closebox.gif +0 -0
  323. data/util/image-gallery/js/SmoothGallery/css/img/closebox.png +0 -0
  324. data/util/image-gallery/js/SmoothGallery/css/img/fleche1.gif +0 -0
  325. data/util/image-gallery/js/SmoothGallery/css/img/fleche1.png +0 -0
  326. data/util/image-gallery/js/SmoothGallery/css/img/fleche2.gif +0 -0
  327. data/util/image-gallery/js/SmoothGallery/css/img/fleche2.png +0 -0
  328. data/util/image-gallery/js/SmoothGallery/css/img/loading-bar-black.gif +0 -0
  329. data/util/image-gallery/js/SmoothGallery/css/img/open.gif +0 -0
  330. data/util/image-gallery/js/SmoothGallery/css/img/open.png +0 -0
  331. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_e.png +0 -0
  332. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_n.png +0 -0
  333. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_ne.png +0 -0
  334. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_nw.png +0 -0
  335. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_s.png +0 -0
  336. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_se.png +0 -0
  337. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_sw.png +0 -0
  338. data/util/image-gallery/js/SmoothGallery/css/img/remo_bg_w.png +0 -0
  339. data/util/image-gallery/js/SmoothGallery/css/img/spinner.gif +0 -0
  340. data/util/image-gallery/js/SmoothGallery/css/jd.gallery.css +371 -0
  341. data/util/image-gallery/js/SmoothGallery/css/layout.css +91 -0
  342. data/util/image-gallery/js/SmoothGallery/license.txt +621 -0
  343. data/util/image-gallery/js/SmoothGallery/resizer.php +113 -0
  344. data/util/image-gallery/js/SmoothGallery/scripts/Changelog +52 -0
  345. data/util/image-gallery/js/SmoothGallery/scripts/History.Routing.js +126 -0
  346. data/util/image-gallery/js/SmoothGallery/scripts/History.js +109 -0
  347. data/util/image-gallery/js/SmoothGallery/scripts/ReMooz.js +364 -0
  348. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.js +843 -0
  349. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.set.js +183 -0
  350. data/util/image-gallery/js/SmoothGallery/scripts/jd.gallery.transitions.js +90 -0
  351. data/util/image-gallery/js/SmoothGallery/scripts/jdgalleryresize.js +828 -0
  352. data/util/image-gallery/js/SmoothGallery/scripts/license.txt +621 -0
  353. data/util/image-gallery/js/SmoothGallery/scripts/mootools-1.2-more.js +103 -0
  354. data/util/image-gallery/js/SmoothGallery/scripts/mootools-1.2.1-core-yc.js +349 -0
  355. data/util/image-gallery/js/SmoothGallery/scripts/resizer.php +113 -0
  356. data/util/image-gallery/misc/plugin/recent_image.rb +406 -0
  357. data/util/image-gallery/skel/gallery.rhtml +154 -0
  358. data/util/image-gallery/skel/gallery.rhtml.euc-jp +154 -0
  359. data/util/image-gallery/tdiary.conf.igsample +8 -0
  360. data/util/image-gallery/theme/image-gallery.css +85 -0
  361. data/util/image2flickr.rb +282 -0
  362. data/util/posttdiary/README.ja +12 -0
  363. data/util/posttdiary/posttdiary-ex.rb +1155 -0
  364. data/util/posttdiary/posttdiary.rb +245 -0
  365. data/util/rast-search/ChangeLog +55 -0
  366. data/util/rast-search/README.ja +99 -0
  367. data/util/rast-search/en/rast-register.rb +3 -0
  368. data/util/rast-search/i.rast.rhtml +33 -0
  369. data/util/rast-search/ja/rast-register.rb +3 -0
  370. data/util/rast-search/rast-register.rb +326 -0
  371. data/util/rast-search/rast-search.rb +249 -0
  372. data/util/rast-search/rast.rhtml +66 -0
  373. data/util/rast-search/rast.rxml +21 -0
  374. data/util/section_link/README +11 -0
  375. data/util/section_link/misc/plugin/section_link.rb +68 -0
  376. data/util/section_link/misc/plugin/section_link_anchor.rb +38 -0
  377. data/util/section_link/tdiary/tdiary_day_ext.rb +21 -0
  378. data/util/section_link/tdiary/tdiaryext_style.rb +36 -0
  379. data/util/section_link/tdiary/wikiext_style.rb +36 -0
  380. data/util/tdiary-for-ruby1.9/compatible.rb +97 -0
  381. data/util/tdiary-for-ruby1.9/tdiary-2.2.0.patch +98 -0
  382. data/util/tdiary-for-ruby1.9/tdiary-2.3.1.patch +212 -0
  383. data/util/tdiary-grep/README +4 -0
  384. data/util/tdiary-grep/grep.rb +445 -0
  385. data/util/tdiary-mode/http.el +130 -0
  386. data/util/tdiary-mode/tdiary-mode.el +613 -0
  387. data/util/tdiary-vim/ChangeLog +25 -0
  388. data/util/tdiary-vim/README +60 -0
  389. data/util/tdiary-vim/tdiary.vim +350 -0
  390. data/util/tdiarysearch/README.en +53 -0
  391. data/util/tdiarysearch/README.ja +99 -0
  392. data/util/tdiarysearch/search.rb +504 -0
  393. metadata +497 -0
@@ -0,0 +1,69 @@
1
+ image_detail.rb
2
+
3
+ 機能
4
+ JPEGファイルに含まれるExif情報を解析し、各種撮影条件を表示します。
5
+ また、位置情報が含まれる場合、周辺地図ををポップアップ表示し、
6
+ Googleマップへのリンクを生成します。
7
+
8
+
9
+ 更新情報
10
+ revision 1.0:
11
+ ファーストリリース
12
+ revision 1.1:
13
+ スマートフォン対応、その他
14
+
15
+ インストール
16
+ このPluginはimage.rbが導入されていることを前提としています。
17
+ image.rbを有効にしてください。また、image_ex.rbと共存することはできません。
18
+
19
+ ・ExifParserの導入
20
+ image_detail.rbはExifのパーサとして、ExifParserを使用しています。
21
+ tdiary/lib/ExifParser/READMEに従って導入してください。
22
+
23
+ ・Pluginのインストール
24
+ image_detail.rbを適切な場所に配置してください。多言語用リソースは存在しません。
25
+
26
+ ・Google Maps API Keyの取得
27
+ http://code.google.com/intl/ja/apis/maps/signup.html
28
+ にてAPIキーを生成し、[設定]-[その他]-[image_gpsの設定]の
29
+ Google Maps API Keyに生成されたAPIキーを設定してください。
30
+ APIキーが設定されていない場合、地図のポップアップ表示および
31
+ モバイルモードでの地図の表示ができません。
32
+
33
+ ・CSSの追加
34
+ 写真と撮影条件をそれっぽく表示するために、CSSを設定する必要があります。
35
+ apend_css.rbを使用すると簡単にCSSを追加することができます。
36
+ 参考に、作者が設定しているCSSを示します。
37
+
38
+ --ここから
39
+ img.photo{
40
+ float:left;
41
+ clear:both;
42
+ }
43
+
44
+ div.photo_detail{
45
+ clear:both;
46
+ display:block;
47
+ margin:0.5em;
48
+ padding:0.5em;
49
+ }
50
+
51
+ div.photo_detail ul{
52
+ list-style-type:none;
53
+ }
54
+
55
+ img.map {
56
+ outline:solid 5px gray;
57
+ }
58
+ --ここまで
59
+
60
+ 使用方法
61
+ プラグインの書式は、image.rbと同じです。
62
+
63
+ 画像がJPEGかつExif情報を含む場合各種撮影条件を表示します。
64
+ Exif情報に位置情報が含まれている場合、地図をポップアップ表示し、
65
+ Googleマップへのリンクを生成します。
66
+
67
+ 制限事項
68
+ secureモードには対応していません。
69
+ image_ex.rbと同時に使用することはできません。
@@ -0,0 +1,36 @@
1
+ image_gps.rb
2
+
3
+ 機能
4
+ アップロードした画像に含まれているGPSの位置情報を使用して、
5
+ 対応する地図へのリンクを生成します。また、画像ファイルに機種名などの情
6
+ 報が含まれている場合、タイトル情報として表示する事が可能です。
7
+
8
+ 更新情報
9
+ revision 1.7:
10
+ リンク先をGoogleMapにした。
11
+ モバイルモード時も世界測地系に変換する。
12
+
13
+ インストール
14
+ このPluginはimage.rbが導入されていることを前提としています。
15
+ image.rbを有効にしてください。また、image_ex.rbと共存することはできません。
16
+
17
+ ・ExifParserの導入
18
+ image_gps.rbはExifのパーサとして、ExifParserを使用しています。
19
+ tdiary/lib/ExifParser/READMEに従って導入してください。
20
+
21
+ ・Pluginのインストール
22
+ image_gps.rbを適切な場所に配置してください。多言語用リソースは存在しません。
23
+
24
+ 使用方法
25
+ image.rbと同じです。画像にGPSの情報が含まれている場合は自動的に
26
+ GoogleMAP(http://maps.google.co.jp/ )へのリンクを生成します。
27
+
28
+ 携帯端末でアクセスした場合は、http://walk.eznavi.jp/ へのリンクを生成します。
29
+ auのezナビウォーク対応機種ではezナビウォークを起動するページが表示されます。
30
+ それ以外の端末ではhttp://map.navitime.jp/ へリダイレクトされます。
31
+
32
+ サムネイル画像が指定されている場合は、そちらが優先されます。
33
+
34
+ 制限事項
35
+ secureモードには対応していません。
36
+ image_ex.rbと同時に使用することはできません。
@@ -0,0 +1,41 @@
1
+ image_gps2.rb
2
+
3
+ 機能
4
+ アップロードした画像に含まれているGPSの位置情報を使用して、
5
+ 対応する地図をポップアップ表示します。また、画像ファイルに機種名などの情
6
+ 報が含まれている場合、タイトル情報として表示する事が可能です。
7
+
8
+ 更新情報
9
+ revision 0.8:
10
+ first release.
11
+ image_gps.rbからフォークしたよ。
12
+
13
+ インストール
14
+ このPluginはimage.rbが導入されていることを前提としています。
15
+ image.rbを有効にしてください。また、image_ex.rbと共存することはできません。
16
+
17
+ ・ExifParserの導入
18
+ image_gps2.rbはExifのパーサとして、ExifParserを使用しています。
19
+ tdiary/lib/ExifParser/READMEに従って導入してください。
20
+
21
+ ・Pluginのインストール
22
+ image_gps2.rbを適切な場所に配置してください。多言語用リソースは存在しません。
23
+
24
+ ・Google MAPS APIキーの設定
25
+ このPluginを使用するには、Google MAPS APIのキーを取得し、設定する必要があります。
26
+ http://code.google.com/intl/ja/apis/maps/signup.html にてtDiaryのあるドメインの
27
+ URLを入力し、キーを取得してください。
28
+
29
+ 取得したキーを[設定]-[その他]-[image_gpsの設定]のGoogle Maps API Keyに
30
+ 設定すると使用できるようになります。
31
+
32
+ 使用方法
33
+ image.rbと同じです。画像にGPSの情報が含まれている場合はマウスオーバー
34
+ でGoogle Maps Static APIを利用した地図をポップアップで表示します。
35
+
36
+ 携帯端末でアクセスした場合は、リンク先がGoogle Maps Static APIで生成した
37
+ 地図の画像となります。
38
+
39
+ 制限事項
40
+ secureモードには対応していません。
41
+ image_ex.rbと同時に使用することはできません。
@@ -0,0 +1,105 @@
1
+ ! 概要
2
+ [[Weather Hacks - livedoor 天気情報|http://weather.livedoor.com/weather_hacks/]]を利用して日記に天気情報を埋め込むプラグイン
3
+
4
+ !使い方
5
+ インストールしたら、設定画面で天気情報を取得する都市IDを設定してください。日記更新時に天気情報を取得します。
6
+ デフォルトでは日記の一日単位上部に天気情報を埋め込みます。
7
+
8
+ !!CSS
9
+ div.lwws {
10
+ text-align: right;
11
+ font-size: 0.8em;
12
+ }
13
+ 上記のように設定すると見やすくなります。
14
+
15
+ !!キャッシュファイル
16
+ 天気情報はxml形式で
17
+ @cache_path/lwws/YYYYMMDD.xml
18
+ というファイルに保存しています。
19
+
20
+ !!プラグイン呼び出し
21
+ !!!lwws_today
22
+ 今日の天気を表示します。
23
+ !!!lwws_tomorrow
24
+ 明日の天気を表示します。
25
+ !!!lwws_dayaftertomorrow
26
+ 明後日の天気を表示します。
27
+
28
+ !!!使い方
29
+ 例えば(Wikiスタイルの例)
30
+ ||今日||明日||明後日
31
+ ||{{lwws_today}}||{{lwws_tomorrow}}||{{lwws_dayaftertomorrow}}
32
+ と書くと三日分の天気が表で表示されます。
33
+ サイドバーなどに使うとかっこいいかもしれません。
34
+
35
+ !ToDo
36
+ *セキュア対応
37
+ *キャッシュの削除機能
38
+ *(他にあれば募集します)
39
+
40
+ !ライセンス
41
+ GPL2
42
+
43
+ !更新履歴
44
+ !!20070329
45
+ * open-uri の proxy を tdiary.conf から読み込むようにした
46
+
47
+ !!20070214
48
+ * feed 生成時の出力を抑制
49
+
50
+ !!20070206
51
+ * NKFを使うのをやめて @conf.to_native を使うようにした
52
+ * proxy の削除(trunk に追従)
53
+ * to_native の第二引数として utf-8 を指定
54
+
55
+ !!20070109
56
+ * サニタイズキャンペーンに伴う修正
57
+
58
+ !!20060712
59
+ * lwws_getのバグ修正
60
+
61
+ !!20060709
62
+ * 設定更新時には強制的にキャッシュを再取得するように変更
63
+
64
+ !!20060702
65
+ * lwws_getの処理を変更
66
+
67
+ !!20060310
68
+ * 設定が保存されない不具合の修正
69
+
70
+ !!20060309
71
+ * キャッシュの自動更新を設定可能にする
72
+ * 自動更新間隔を任意で設定可能にする
73
+ ** 自動更新間隔を0にするとアクセスするたびにLWWSをたたくようになるので、適当に6-12くらいの数字を入れるのを推奨。
74
+
75
+ !!20060219
76
+ * 携帯閲覧時には画像を非表示
77
+ * 画像にtitle要素としてtelopエレメントを追加
78
+
79
+ !!20060213
80
+ * キャッシュファイルを6時間で更新するようにした。
81
+ * 任意の日付の天気を表示するlwwsメソッドを追加
82
+
83
+ !!20060212
84
+ * 新規メソッドとしてlwws_today,lwws_tomorrow,lwws_dayaftertomorrowを追加。プラグイン呼び出しとして、任意の場所に天気を表示します。
85
+ * 表示項目を変更機能の追加(設定画面)。
86
+ * アイコン表示機能の追加(設定画面)。
87
+ * 詳細へのリンクは天候に作成するようにした。(アイコンの場合はアイコンに設定)
88
+ * convert_dateメソッドを追加。date_statusからYYYYMMDD形式の文字列を返します。
89
+ * 英語リソースをでっちあげた。(中国語は英語リソースの焼きまわし)
90
+ * 「℃」を言語リソースに移動
91
+ * lwws_to_thmlメソッドで任意の日付を指定可能にした。
92
+
93
+
94
+ !!20060211
95
+ * lwws_getメソッドの引数をdateからdate_status(today,tomorrow,dayaftertomorrow)へと変更
96
+ * 設定画面の不要なエスケープを修正
97
+ * lwws_getメソッドでxmlを保存する時にYYYYMMDD形式になっていないバグを修正
98
+
99
+ !!20060210
100
+ * 最初のリリース
101
+ * Uconvではなく、NKFを使ってUTF-8を扱うようにした。
102
+ * typo(というか、コピペ修正ミス)を直した。
103
+ * 最高気温、最低気温が存在する場合には表示するようにした。
104
+ * livedoor天気情報へのリンクを作るようにした。
105
+ * proxyの情報はamazon.proxyに統合した。
@@ -0,0 +1,16 @@
1
+ ! 名前
2
+ OpenSearch Auto-Discovery プラグイン
3
+
4
+ ! 概要
5
+ tDiaryをOpenSearch Auto-Discoveryに対応させるプラグイン
6
+
7
+ !使い方
8
+ 利用するには OpenSearch description XML をあらかじめ作成する必要があります。
9
+ サンプルファイルは http://www.opensearch.org/Specifications/OpenSearch/1.1 にあります。
10
+
11
+ !ライセンス
12
+ GPL2
13
+
14
+ !更新履歴
15
+ !!20070117
16
+ * tDiary-contrib に追加
@@ -0,0 +1,84 @@
1
+ ! 概要
2
+ セクションの後ろにナビゲーションを追加するプラグイン。
3
+
4
+ 以下の項目が追加されます。
5
+
6
+ * タグ(カテゴリ)
7
+ * このエントリを含むはてなブックマーク
8
+ * はてなブックマークコメント表示
9
+ * このエントリを含む del.icio.us
10
+ * このエントリを含む livedoor クリップ
11
+ * このエントリを含む Buzzurl
12
+ * Permalink
13
+
14
+ !注意事項
15
+ * blogkitでは動きません
16
+ * セキュアな環境では動きません
17
+ * category_to_tag.rb と同時に使うことはできません
18
+ * Permalinkやアイコンは用途に合わせてadd_section_leave_procから適当に削ってください
19
+ * 利用するには [[JSON library for Ruby|http://rubyforge.org/projects/json/]] が必要(lib 以下に配置済み)
20
+
21
+ ! 動作事例
22
+ http://www.hsbt.org/diary/
23
+
24
+ !ライセンス
25
+ GPL2
26
+
27
+ ! Changelog
28
+ !!20070323
29
+ * del.icio.us Image API 使用時に ?aggregate を追加
30
+
31
+ !!20070322
32
+ * 画像取得API に対応
33
+
34
+ !!20070321
35
+ * JSON library for Ruby を追加
36
+
37
+ !!20070215
38
+ * アイコンを本家から持ってくるようにした
39
+
40
+ !!20070212
41
+ * Buzzurl(http://buzzurl.jp) に対応した
42
+
43
+ !!20070210
44
+ * Permalink 生成時の余計なエスケープをしないようにした
45
+
46
+ !!20070206
47
+ * NKFを使うのをやめて @conf.to_native を使うようにした
48
+ * to_native の第二引数として utf-8 を指定
49
+
50
+ !!20070205
51
+ * delicious JSON のキャッシュデータは @cache/delicious/YYYYMM に作成するようにした
52
+
53
+ !!20070204
54
+ * 全面的に見直し、追加関係のリンクは生成しないようにした
55
+ * del.icio.us の JSON API に対応、ブックマーク数を表示できるようにした
56
+ * はてなブックマーク、livedoor クリップのブックマーク数画像表示APIに対応させた
57
+ * 上記のAPIを使うようにしたため、まちゅさんのブックマークカウントキャッシュは使わないようにした
58
+
59
+ !!20060107
60
+ * リンク追加処理をメソッドとして分離
61
+
62
+ !!20051229
63
+ * [[人気の日記プラグイン (はてなブックマーク + MM/Memo) - まちゅダイアリー (2005-12-27)|http://www.machu.jp/diary/20051227.html#p03]]の改造の取り込み
64
+
65
+ !!20051227
66
+ * [[人気の日記プラグイン (はてなブックマーク) - まちゅダイアリー (2005-12-27)|http://www.machu.jp/diary/20051227.html#p02]]の改造の取り込み
67
+
68
+ !!20051207
69
+ * 「このエントリを含むdel.icio.us」のリンクを追加
70
+
71
+ !!20051129
72
+ * 「このエントリを含むMM/Memo」のリンクを追加
73
+
74
+ !!20051124
75
+ * 「このエントリをdel.icio.usに追加」のリンクを追加
76
+
77
+ !!20051121
78
+ * 携帯からのアクセスの時には表示しないようにした。
79
+
80
+ !!20051114
81
+ * 最初のリリース
82
+
83
+ ! 謝辞
84
+ このプラグインはたださんが作ったcategory_to_tag.rbとえろぺおさんによる[[tDiary の指定したセクションの permalink を求める|http://bigfield.ddo.jp/diary/20051026.html#p01]]をインスパイヤしました。ありがとうございました!
@@ -0,0 +1 @@
1
+ See: http://arika.org/diary/20050421#p01
data/doc/ja/plugin.txt ADDED
@@ -0,0 +1,13 @@
1
+ == tDiary contrib/plugin ==
2
+
3
+ ここに収録されたプラグインは、
4
+
5
+ * 汎用性が低い
6
+ * 国際化対応されていない(する意味がない)
7
+ * tDiaryのバージョンに合わせたアップデートがされていない
8
+ * tDiary本体または標準プラグインの動作環境から外れている
9
+
10
+ 等の理由でプラグイン集への収録が見送られているものですが、
11
+ それぞれはとても有用なプラグインです。
12
+
13
+ 個々の説明は、それぞれのプラグインのディレクトリに入っています。
@@ -0,0 +1,10 @@
1
+ == tDiary contrib/sytle/hatena_style ==
2
+
3
+ はてなダイアリー<http://d.hatena.ne.jp/>互換スタイルです。
4
+
5
+ * インストール方法
6
+ 添付の hatena_style.rb を他のスタイルと同様 core/tdiary/ に投入してください。
7
+ その後、 tdiary.conf でスタイルを 'Hatena' と指定すると有効になります
8
+
9
+ * 記法
10
+ 記法に関してははてなダイアリーのヘルプ<http://d.hatena.ne.jp/help>を参照してください。ここに記載されていることのうち、<hatena 〜>以外には対応しています。
@@ -0,0 +1,13 @@
1
+ == tDiary contrib/sytle/markdown_style ==
2
+
3
+ Markdown<http://daringfireball.net/projects/markdown/>スタイルです。
4
+
5
+ * インストール方法
6
+ BlueClothが必要です。<http://raa.ruby-lang.org/project/bluecloth/>から入手してインストールしてください。
7
+ 添付の markdown_style.rb を他のスタイルと同様 core/tdiary/ に投入してください。
8
+ その後、 tdiary.conf でスタイルを 'Markdown' と指定すると有効になります
9
+
10
+ * 記法
11
+ 記法に関してはMarkdown文法紹介<http://unmovabletype.org/archives/2004/08/markdown_syntax.html>を参照してください。
12
+ tDiaryでの拡張として#が<h3>に##が<h4>になります。セクションの区切りは#で行います。
13
+ tDiaryのプラグインを呼び出すには{{〜}}で囲みます。(例: {{my '20041004p01','test'}} )
data/doc/ja/util.txt ADDED
@@ -0,0 +1,12 @@
1
+ == tDiary contrib/util ==
2
+
3
+ ここに収録されたツールは、
4
+
5
+ * 汎用性が低い
6
+ * 国際化対応されていない(する意味がない)
7
+ * tDiaryのバージョンに合わせたアップデートがされていない
8
+
9
+ 等の理由でcoreへの収録が見送られているものですが、
10
+ それぞれはとても有用なユーティリティです。
11
+
12
+ 個々の説明は、それぞれのディレクトリに入っています。
@@ -0,0 +1,263 @@
1
+ #
2
+ # antirefspam.rb
3
+ #
4
+ # Copyright (c) 2004-2005 T.Shimomura <redbug@netlife.gr.jp>
5
+ # You can redistribute it and/or modify it under GPL2.
6
+ # Please use version 1.0.0 (not 1.0.0G) if GPL doesn't want to be forced on me.
7
+ #
8
+
9
+ require 'net/http'
10
+ require 'uri'
11
+
12
+ module TDiary
13
+ module Filter
14
+
15
+ class AntirefspamFilter < Filter
16
+ # 有効にすると指定したファイルにデバッグ情報文字列を追記する
17
+ def debug_out(filename, str)
18
+ if $debug
19
+ filename = File.join(@conf.data_path,"AntiRefSpamFilter",filename)
20
+ File::open(filename, "a+") {|f|
21
+ f.puts str
22
+ }
23
+ end
24
+ end
25
+
26
+ # str に指定された文字列が適切なリンク先を含んでいるかをチェック
27
+ def isIncludeMyUrl(str)
28
+ # str に日記のURLが含まれているかどうか
29
+ base_url = @conf.base_url
30
+ unless base_url.empty?
31
+ if str.include? base_url
32
+ return true
33
+ end
34
+ end
35
+
36
+ # str にトップページURLが含まれているかどうか
37
+ unless @conf.index_page.empty?
38
+ if @conf.index_page.index(URI.regexp(%w[http https])) == 0
39
+ if str.include? @conf.index_page
40
+ return true
41
+ end
42
+ end
43
+ end
44
+
45
+ # str に許容するリンク先が含まれているかどうか
46
+ if (myurl = @conf['antirefspam.myurl']) && !myurl.empty?
47
+ if str.include? myurl
48
+ return true
49
+ end
50
+
51
+ #url = myurl.gsub("/", "\\/").gsub(":", "\\:")
52
+ #exp = Regexp.new(url)
53
+ exp = Regexp.union(myurl)
54
+ if exp =~ str
55
+ return true
56
+ end
57
+ end
58
+
59
+ return false
60
+ end
61
+
62
+ def referer_filter(referer)
63
+ conf_disable = @conf['antirefspam.disable'] != nil ? @conf['antirefspam.disable'].to_s : ''
64
+ conf_checkreftable = @conf['antirefspam.checkreftable'] != nil ? @conf['antirefspam.checkreftable'].to_s : ''
65
+ conf_trustedurl = @conf['antirefspam.trustedurl'] != nil ? @conf['antirefspam.trustedurl'].to_s : ''
66
+ conf_proxy_server = @conf['antirefspam.proxy_server'] != nil && @conf['antirefspam.proxy_server'].size > 0 ? @conf['antirefspam.proxy_server'].to_s : nil
67
+ conf_proxy_port = @conf['antirefspam.proxy_port'] != nil && @conf['antirefspam.proxy_port'].size > 0 ? @conf['antirefspam.proxy_port'].to_s : nil
68
+
69
+ if conf_disable == 'true' or # リンク元チェックが有効ではない場合はスルーする
70
+ referer == nil or # リンク元が無い
71
+ referer.size <= 1 or # 一部のアンテナで更新時刻が取れなくなる問題に対応するため、リンク元が1文字以内の場合は許容
72
+ isIncludeMyUrl(referer) # 自分の日記内からのリンクは信頼する
73
+ then
74
+ return true
75
+ end
76
+
77
+ # "信頼できるURL" を1つずつ取り出してrefererと合致するかチェックする
78
+ conf_trustedurl.each_line do |trusted|
79
+ trusted.sub!(/\r?\n|\r/,'')
80
+ next if trusted =~ /\A(\#|\s*)\z/ # #または空白で始まる行は読み飛ばす
81
+
82
+ # まずは "信頼できる URL" が referer に含まれるかどうか
83
+ if referer.include? trusted
84
+ debug_out("trusted", trusted+" (include?) "+referer)
85
+ return true
86
+ end
87
+
88
+ # 含まれなかった場合は "信頼できる URL" を正規表現とみなして再チェック
89
+ begin
90
+ #if referer =~ Regexp.new( trusted.gsub("/", "\\/").gsub(":", "\\:") )
91
+ if referer =~ Regexp.union( trusted )
92
+ debug_out("trusted", trusted+" (=~) "+referer)
93
+ return true
94
+ end
95
+ rescue
96
+ debug_out("error_config", "trustedurl: "+trusted)
97
+ end
98
+ end
99
+
100
+ # URL置換リストを見る
101
+ if conf_checkreftable == 'true'
102
+ # "URL置換リスト" を1つずつ取り出してrefererと合致するかチェックする
103
+ @conf.referer_table.each do |url, name|
104
+ begin
105
+ if /#{url}/i =~ referer && url != '^(.{50}).*$'
106
+ debug_out("trusted", url+" (=~referer_table) "+referer)
107
+ return true
108
+ end
109
+ rescue
110
+ debug_out("error_config", "referer_table: "+url)
111
+ end
112
+ end
113
+ end
114
+
115
+ @work_path = File.join(@conf.data_path,"AntiRefSpamFilter")
116
+ @spamurl_list = File.join(@work_path,"spamurls") # referer spam のリンク元一覧
117
+ @spamip_list = File.join(@work_path,"spamips") # referer spam のIP一覧
118
+ @safeurl_list = File.join(@work_path,"safeurls") # おそらくは問題のないリンク元一覧
119
+
120
+ # ディレクトリ/ファイルが存在しなければ作る
121
+ unless File.exist? @work_path
122
+ Dir::mkdir(@work_path)
123
+ end
124
+ unless File.exist? @spamurl_list
125
+ File::open(@spamurl_list, "a").close
126
+ end
127
+ unless File.exist? @safeurl_list
128
+ File::open(@safeurl_list, "a").close
129
+ end
130
+
131
+ uri = URI.parse(referer)
132
+ temp_filename = File.join(@work_path,uri.host)
133
+ # チェック時には対象のドメイン名を持った一時ファイルを作る
134
+ begin
135
+ File::open(temp_filename, File::RDONLY | File::CREAT | File::EXCL).close
136
+
137
+ # 一度 SPAM URL とみなしたら以後は以後は拒否
138
+ spamurls = IO::readlines(@spamurl_list).map {|url| url.chomp }
139
+ if spamurls.include? referer
140
+ return false
141
+ end
142
+
143
+ # 一度 SPAM URL でないと判断したら以後は許可
144
+ safeurls = IO::readlines(@safeurl_list).map {|url| url.chomp }
145
+ if safeurls.include? referer
146
+ return true
147
+ end
148
+
149
+ # リンク元 URL の HTML を引っ張ってくる
150
+ Net::HTTP.version_1_2 # おまじないらしい
151
+ body = ""
152
+ begin
153
+ Net::HTTP::Proxy(conf_proxy_server, conf_proxy_port).start(uri.host, uri.port) do |http|
154
+ if uri.path == ""
155
+ response, = http.get("/")
156
+ else
157
+ response, = http.get(uri.request_uri)
158
+ end
159
+ body = response.body
160
+ end
161
+
162
+ # body に日記の URL が含まれていなければ SPAM とみなす
163
+ unless isIncludeMyUrl(body)
164
+ File::open(@spamurl_list, "a+") {|f|
165
+ f.puts referer
166
+ }
167
+ File::open(@spamip_list, "a+") {|f|
168
+ f.puts [@cgi.remote_addr, Time.now.utc.strftime("%Y/%m/%d %H:%M:%S UTC")].join("\t")
169
+ }
170
+ return false
171
+ else
172
+ File::open(@safeurl_list, "a+") {|f|
173
+ f.puts referer
174
+ }
175
+ end
176
+ rescue
177
+ # エラーが出た場合は @spamurl_list に入れない&リンク元にも入れない
178
+ return false
179
+ end
180
+
181
+ rescue StandardError, TimeoutError
182
+ # 現在チェック中なら、今回はリンク元に勘定しない
183
+ return false
184
+ ensure
185
+ begin
186
+ File::delete(temp_filename)
187
+ rescue
188
+ end
189
+ end
190
+
191
+ return true
192
+ end
193
+
194
+
195
+
196
+ def log_spamcomment( diary, comment )
197
+ @work_path = File.join(@conf.data_path,"AntiRefSpamFilter")
198
+ @spamcomment_list = File.join(@work_path,"spamcomments") # comment spam の一覧
199
+
200
+ # ディレクトリ/ファイルが存在しなければ作る
201
+ unless File.exist? @work_path
202
+ Dir::mkdir(@work_path)
203
+ end
204
+ unless File.exist? @spamcomment_list
205
+ File::open(@spamcomment_list, "a").close
206
+ end
207
+
208
+ File::open(@spamcomment_list, "a+") {|f|
209
+ f.puts "From: "+comment.name+" <"+comment.mail+">"
210
+ f.puts "To: "+diary.date.to_s
211
+ f.puts "Date: "+comment.date.to_s
212
+ f.puts comment.body
213
+ f.puts ".\n\n"
214
+ }
215
+ end
216
+
217
+ def comment_filter( diary, comment )
218
+ # ツッコミに日本語(ひらがな/カタカナ)が含まれていなければ不許可
219
+ if @conf['antirefspam.comment_kanaonly'] != nil
220
+ if @conf['antirefspam.comment_kanaonly'].to_s == 'true'
221
+ unless comment.body =~ /[ぁ-んァ-ヴー]/
222
+ log_spamcomment( diary, comment )
223
+ return false
224
+ end
225
+ end
226
+ end
227
+
228
+ # ツッコミの文字数が指定した上限以内でないなら不許可
229
+ maxsize = @conf['antirefspam.comment_maxsize'].to_i
230
+ if maxsize > 0
231
+ unless comment.body.size <= maxsize
232
+ log_spamcomment( comment )
233
+ return false
234
+ end
235
+ end
236
+
237
+ # NGワードが1つでも含まれていたら不許可
238
+ if @conf['antirefspam.comment_ngwords'] != nil
239
+ ngwords = @conf['antirefspam.comment_ngwords']
240
+ ngwords.to_s.each_line do |ngword|
241
+ ngword.sub!(/\r?\n|\r/,'')
242
+ if comment.body.downcase.include? ngword.downcase
243
+ log_spamcomment( comment )
244
+ return false
245
+ end
246
+
247
+ # 含まれなかった場合は "NGワード" を正規表現とみなして再チェック
248
+ begin
249
+ if comment.body =~ Regexp.new( ngword, Regexp::MULTILINE )
250
+ log_spamcomment( comment )
251
+ return false
252
+ end
253
+ rescue
254
+ debug_out("error_config", "comment_ngwords: "+ngword)
255
+ end
256
+ end
257
+ end
258
+
259
+ return true
260
+ end
261
+ end
262
+ end
263
+ end