yapra 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. data/History.txt +4 -0
  2. data/LICENCE +22 -0
  3. data/License.txt +22 -0
  4. data/Manifest.txt +103 -0
  5. data/PostInstall.txt +7 -0
  6. data/README.txt +66 -0
  7. data/Rakefile +13 -0
  8. data/bin/yapra +52 -0
  9. data/config/hoe.rb +75 -0
  10. data/config/requirements.rb +15 -0
  11. data/legacy_plugins/Download/nicovideo.rb +45 -0
  12. data/legacy_plugins/Feed/custom_feed.rb +87 -0
  13. data/legacy_plugins/Feed/google_calendar.rb +51 -0
  14. data/legacy_plugins/Feed/google_search_history.rb +45 -0
  15. data/legacy_plugins/Feed/hatena_graph.rb +37 -0
  16. data/legacy_plugins/Feed/lirs.rb +36 -0
  17. data/legacy_plugins/Filter/Translations/yahoo.rb +40 -0
  18. data/legacy_plugins/Filter/apply_text_html.rb +26 -0
  19. data/legacy_plugins/Filter/average.rb +6 -0
  20. data/legacy_plugins/Filter/deduped.rb +51 -0
  21. data/legacy_plugins/Filter/find_num.rb +8 -0
  22. data/legacy_plugins/Filter/find_regex.rb +9 -0
  23. data/legacy_plugins/Filter/fresh.rb +9 -0
  24. data/legacy_plugins/Filter/get_html.rb +11 -0
  25. data/legacy_plugins/Filter/grep.rb +16 -0
  26. data/legacy_plugins/Filter/invert.rb +14 -0
  27. data/legacy_plugins/Filter/sort.rb +10 -0
  28. data/legacy_plugins/Filter/subs.rb +6 -0
  29. data/legacy_plugins/Filter/to_integer.rb +4 -0
  30. data/legacy_plugins/Publish/delicious.rb +91 -0
  31. data/legacy_plugins/Publish/google_calendar.rb +58 -0
  32. data/legacy_plugins/Publish/hatena_bookmark.rb +47 -0
  33. data/legacy_plugins/Publish/hatena_diary_writer.rb +53 -0
  34. data/legacy_plugins/Publish/hatena_graph.rb +39 -0
  35. data/legacy_plugins/Publish/lingr.rb +110 -0
  36. data/legacy_plugins/Publish/mixi_diary_writer.rb +104 -0
  37. data/legacy_plugins/Publish/scuttle.rb +92 -0
  38. data/legacy_plugins/Publish/twitter.rb +35 -0
  39. data/legacy_plugins/RSS/load.rb +38 -0
  40. data/legacy_plugins/RSS/save.rb +41 -0
  41. data/legacy_plugins/Yaml/load.rb +5 -0
  42. data/legacy_plugins/Yaml/save.rb +9 -0
  43. data/legacy_plugins/argv.rb +5 -0
  44. data/legacy_plugins/concat.rb +18 -0
  45. data/legacy_plugins/const_list.rb +15 -0
  46. data/legacy_plugins/first.rb +11 -0
  47. data/legacy_plugins/head.rb +14 -0
  48. data/legacy_plugins/load_path.rb +21 -0
  49. data/legacy_plugins/plagger.rb +94 -0
  50. data/legacy_plugins/plugin_from_uri.rb +31 -0
  51. data/legacy_plugins/pluginbase.rb +4 -0
  52. data/legacy_plugins/print.rb +15 -0
  53. data/legacy_plugins/reverse.rb +10 -0
  54. data/legacy_plugins/send_msg.rb +18 -0
  55. data/legacy_plugins/stdin.rb +6 -0
  56. data/legacy_plugins/stdout.rb +6 -0
  57. data/lib/yapra/config.rb +103 -0
  58. data/lib/yapra/inflector.rb +55 -0
  59. data/lib/yapra/legacy_plugin/advance_mode_registry.rb +38 -0
  60. data/lib/yapra/legacy_plugin/base.rb +26 -0
  61. data/lib/yapra/legacy_plugin/compatible_mode_registry.rb +34 -0
  62. data/lib/yapra/legacy_plugin/registry_factory.rb +21 -0
  63. data/lib/yapra/legacy_plugin.rb +5 -0
  64. data/lib/yapra/pipeline.rb +74 -0
  65. data/lib/yapra/plugin/base.rb +14 -0
  66. data/lib/yapra/plugin/context_aware.rb +14 -0
  67. data/lib/yapra/plugin/erb_applier.rb +15 -0
  68. data/lib/yapra/plugin/feed_item_operator.rb +21 -0
  69. data/lib/yapra/plugin/mechanize_base.rb +26 -0
  70. data/lib/yapra/plugin.rb +5 -0
  71. data/lib/yapra/runtime.rb +36 -0
  72. data/lib/yapra/version.rb +9 -0
  73. data/lib/yapra.rb +44 -0
  74. data/lib-plugins/yapra/plugin/config/agent.rb +34 -0
  75. data/lib-plugins/yapra/plugin/config/basic_auth.rb +19 -0
  76. data/lib-plugins/yapra/plugin/config/web_post.rb +21 -0
  77. data/lib-plugins/yapra/plugin/feed/custom.rb +41 -0
  78. data/lib-plugins/yapra/plugin/feed/load.rb +29 -0
  79. data/lib-plugins/yapra/plugin/filter/entry_full_text.rb +59 -0
  80. data/lib-plugins/yapra/plugin/publish/file_download.rb +109 -0
  81. data/lib-plugins/yapra/plugin/publish/gmail.rb +27 -0
  82. data/lib-plugins/yapra/plugin/publish/imap.rb +82 -0
  83. data/lib-plugins/yapra/plugin/test/append_entry.rb +25 -0
  84. data/plugins/Filter/deduped.rb +57 -0
  85. data/plugins/Filter/sort.rb +28 -0
  86. data/plugins/Filter/subs.rb +16 -0
  87. data/script/console +10 -0
  88. data/script/destroy +14 -0
  89. data/script/generate +14 -0
  90. data/script/txt2html +82 -0
  91. data/setup.rb +1585 -0
  92. data/spec/spec.opts +1 -0
  93. data/spec/spec_helper.rb +11 -0
  94. data/spec/yapra_spec.rb +11 -0
  95. data/tasks/deployment.rake +34 -0
  96. data/tasks/environment.rake +7 -0
  97. data/tasks/rspec.rake +21 -0
  98. data/tasks/website.rake +17 -0
  99. data/website/index.html +115 -0
  100. data/website/index.txt +57 -0
  101. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  102. data/website/stylesheets/screen.css +138 -0
  103. data/website/template.html.erb +48 -0
  104. metadata +170 -0
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ == 0.1.0 2008-06-20
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/LICENCE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2008 fraction.jp. Some rights reserved.
2
+
3
+ Original from 2008-06-12 http://pragger.ikejisoft.com/
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/License.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2008 fraction.jp. Some rights reserved.
2
+
3
+ Original from 2008-06-12 http://pragger.ikejisoft.com/
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,103 @@
1
+ History.txt
2
+ LICENCE
3
+ License.txt
4
+ Manifest.txt
5
+ PostInstall.txt
6
+ README.txt
7
+ Rakefile
8
+ config/hoe.rb
9
+ config/requirements.rb
10
+ legacy_plugins/Download/nicovideo.rb
11
+ legacy_plugins/Feed/custom_feed.rb
12
+ legacy_plugins/Feed/google_calendar.rb
13
+ legacy_plugins/Feed/google_search_history.rb
14
+ legacy_plugins/Feed/hatena_graph.rb
15
+ legacy_plugins/Feed/lirs.rb
16
+ legacy_plugins/Filter/Translations/yahoo.rb
17
+ legacy_plugins/Filter/apply_text_html.rb
18
+ legacy_plugins/Filter/average.rb
19
+ legacy_plugins/Filter/deduped.rb
20
+ legacy_plugins/Filter/find_num.rb
21
+ legacy_plugins/Filter/find_regex.rb
22
+ legacy_plugins/Filter/fresh.rb
23
+ legacy_plugins/Filter/get_html.rb
24
+ legacy_plugins/Filter/grep.rb
25
+ legacy_plugins/Filter/invert.rb
26
+ legacy_plugins/Filter/sort.rb
27
+ legacy_plugins/Filter/subs.rb
28
+ legacy_plugins/Filter/to_integer.rb
29
+ legacy_plugins/Publish/delicious.rb
30
+ legacy_plugins/Publish/google_calendar.rb
31
+ legacy_plugins/Publish/hatena_bookmark.rb
32
+ legacy_plugins/Publish/hatena_diary_writer.rb
33
+ legacy_plugins/Publish/hatena_graph.rb
34
+ legacy_plugins/Publish/lingr.rb
35
+ legacy_plugins/Publish/mixi_diary_writer.rb
36
+ legacy_plugins/Publish/scuttle.rb
37
+ legacy_plugins/Publish/twitter.rb
38
+ legacy_plugins/RSS/load.rb
39
+ legacy_plugins/RSS/save.rb
40
+ legacy_plugins/Yaml/load.rb
41
+ legacy_plugins/Yaml/save.rb
42
+ legacy_plugins/argv.rb
43
+ legacy_plugins/concat.rb
44
+ legacy_plugins/const_list.rb
45
+ legacy_plugins/first.rb
46
+ legacy_plugins/head.rb
47
+ legacy_plugins/load_path.rb
48
+ legacy_plugins/plagger.rb
49
+ legacy_plugins/plugin_from_uri.rb
50
+ legacy_plugins/pluginbase.rb
51
+ legacy_plugins/print.rb
52
+ legacy_plugins/reverse.rb
53
+ legacy_plugins/send_msg.rb
54
+ legacy_plugins/stdin.rb
55
+ legacy_plugins/stdout.rb
56
+ lib-plugins/yapra/plugin/config/agent.rb
57
+ lib-plugins/yapra/plugin/config/basic_auth.rb
58
+ lib-plugins/yapra/plugin/config/web_post.rb
59
+ lib-plugins/yapra/plugin/feed/custom.rb
60
+ lib-plugins/yapra/plugin/feed/load.rb
61
+ lib-plugins/yapra/plugin/filter/entry_full_text.rb
62
+ lib-plugins/yapra/plugin/publish/file_download.rb
63
+ lib-plugins/yapra/plugin/publish/gmail.rb
64
+ lib-plugins/yapra/plugin/publish/imap.rb
65
+ lib-plugins/yapra/plugin/test/append_entry.rb
66
+ lib/yapra.rb
67
+ lib/yapra/config.rb
68
+ lib/yapra/inflector.rb
69
+ lib/yapra/legacy_plugin.rb
70
+ lib/yapra/legacy_plugin/advance_mode_registry.rb
71
+ lib/yapra/legacy_plugin/base.rb
72
+ lib/yapra/legacy_plugin/compatible_mode_registry.rb
73
+ lib/yapra/legacy_plugin/registry_factory.rb
74
+ lib/yapra/pipeline.rb
75
+ lib/yapra/plugin.rb
76
+ lib/yapra/plugin/base.rb
77
+ lib/yapra/plugin/context_aware.rb
78
+ lib/yapra/plugin/erb_applier.rb
79
+ lib/yapra/plugin/feed_item_operator.rb
80
+ lib/yapra/plugin/mechanize_base.rb
81
+ lib/yapra/runtime.rb
82
+ lib/yapra/version.rb
83
+ plugins/Filter/deduped.rb
84
+ plugins/Filter/sort.rb
85
+ plugins/Filter/subs.rb
86
+ bin/yapra
87
+ script/console
88
+ script/destroy
89
+ script/generate
90
+ script/txt2html
91
+ setup.rb
92
+ spec/spec.opts
93
+ spec/spec_helper.rb
94
+ spec/yapra_spec.rb
95
+ tasks/deployment.rake
96
+ tasks/environment.rake
97
+ tasks/rspec.rake
98
+ tasks/website.rake
99
+ website/index.html
100
+ website/index.txt
101
+ website/javascripts/rounded_corners_lite.inc.js
102
+ website/stylesheets/screen.css
103
+ website/template.html.erb
data/PostInstall.txt ADDED
@@ -0,0 +1,7 @@
1
+
2
+ For more information on yapra, see http://yapra.rubyforge.org
3
+
4
+ NOTE: Change this information in PostInstall.txt
5
+ You can also delete it if you don't want it.
6
+
7
+
data/README.txt ADDED
@@ -0,0 +1,66 @@
1
+ = yapra
2
+
3
+ * http://www.fraction.jp/trac/rana2/wiki/Yapra
4
+
5
+ == DESCRIPTION:
6
+
7
+ Yet Another Pragger(http://pragger.ikejisoft.com/) implementation.
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ * 99% compatible of Pragger.
12
+ * Class-based plugin support.
13
+ * Loadpass based plugin loading strategy. (also support pragger's plugin in advance mode.)
14
+ * Support Python habu like config file.
15
+
16
+ == SYNOPSIS:
17
+
18
+ === Use at command
19
+
20
+ $ yapra -c config_file.yml
21
+
22
+ === Use in your application
23
+
24
+ require 'yapra/runtime'
25
+ require 'yapra/config'
26
+
27
+ config = YAML.load(config_file)
28
+ config = Yapra::Config.new(config)
29
+
30
+ Yapra::Runtime.logger = Logger.new(STDOUT)
31
+
32
+ yapra = Yapra::Runtime.new(config.env)
33
+ yapra.execute(config.pipeline_commands)
34
+
35
+ == REQUIREMENTS:
36
+
37
+ * mechanize (>= 0.7.6)
38
+
39
+ == INSTALL:
40
+
41
+ * sudo gem install yapra
42
+
43
+ == LICENSE:
44
+
45
+ (The MIT License)
46
+
47
+ Copyright (c) 2008 Yuanying Ohtsuka
48
+
49
+ Permission is hereby granted, free of charge, to any person obtaining
50
+ a copy of this software and associated documentation files (the
51
+ 'Software'), to deal in the Software without restriction, including
52
+ without limitation the rights to use, copy, modify, merge, publish,
53
+ distribute, sublicense, and/or sell copies of the Software, and to
54
+ permit persons to whom the Software is furnished to do so, subject to
55
+ the following conditions:
56
+
57
+ The above copyright notice and this permission notice shall be
58
+ included in all copies or substantial portions of the Software.
59
+
60
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
61
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
62
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
63
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
64
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
65
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
66
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'config/requirements'
2
+ require 'config/hoe' # setup Hoe + all gem configuration
3
+
4
+ Dir['tasks/**/*.rake'].each { |rake| load rake }
5
+
6
+ ##############################################################################
7
+ # SVN
8
+ ##############################################################################
9
+
10
+ desc "Add new files to subversion"
11
+ task :svn_add do
12
+ system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
13
+ end
data/bin/yapra ADDED
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby -wKU
2
+ $KCODE='u'
3
+ require 'yaml'
4
+ require 'optparse'
5
+ require 'kconv'
6
+ require 'pathname'
7
+ require 'base64'
8
+
9
+ YAPRA_ROOT = File.join(File.dirname(__FILE__), '..')
10
+
11
+ $:.insert(0, *[
12
+ File.join(YAPRA_ROOT, 'lib-plugins'),
13
+ File.join(YAPRA_ROOT, 'lib')
14
+ ])
15
+
16
+ legacy_plugin_directory_paths = [
17
+ Pathname.new(YAPRA_ROOT) + 'legacy_plugins',
18
+ Pathname.new(YAPRA_ROOT) + 'plugins'
19
+ ]
20
+
21
+ require 'yapra/runtime'
22
+ require 'yapra/config'
23
+ require 'yapra/legacy_plugin/registry_factory'
24
+
25
+ Version = '0.1.0'
26
+ mode = 'compatible'
27
+ config_file = "config.yaml"
28
+ loglebel = nil
29
+ opt = OptionParser.new
30
+ opt.on("-c", "--configfile CONFIGFILE") {|v| config_file = v }
31
+ opt.on("-p", "--plugindir PLUGINDIR") {|v| legacy_plugin_directory_paths << Pathname.new(v) }
32
+ opt.on("-m", "--mode MODE", 'compatible / advance') { |v| mode = v }
33
+ opt.on("--log-level LOGLEVEL", 'fatal / error / warn / info / debug') { |v| loglebel = v }
34
+ # opt.on("-u", "--pluginusage PLUGINNAME") {|v| $plugins[v].source.gsub(/^## ?(.*)/){ puts $1 }; exit }
35
+ # opt.on("-l", "--listplugin") { $plugins.keys.sort.each{|k| puts k }; exit }
36
+ # opt.on("-w", "--where") { puts(Pathname.new(__FILE__).parent + "plugin"); exit }
37
+ opt.parse!
38
+
39
+ legacy_plugin_registry_factory = Yapra::LegacyPlugin::RegistryFactory.new(legacy_plugin_directory_paths, mode)
40
+ config = YAML.load(File.read(config_file).toutf8.gsub(/base64::([\w+\/]+=*)/){ Base64.decode64($1) })
41
+ config = Yapra::Config.new(config)
42
+ config.env.update({
43
+ 'log' => {
44
+ 'level' => loglebel
45
+ }
46
+ }) if loglebel
47
+ Yapra::Runtime.logger = config.create_logger
48
+ yapra = Yapra::Runtime.new(
49
+ config.env,
50
+ legacy_plugin_registry_factory
51
+ )
52
+ yapra.execute(config.pipeline_commands)
data/config/hoe.rb ADDED
@@ -0,0 +1,75 @@
1
+ require 'yapra/version'
2
+
3
+ AUTHOR = 'Yuanying' # can also be an array of Authors
4
+ EMAIL = "yuanying at fraction dot jp"
5
+ DESCRIPTION = "Yet another pragger implementation."
6
+ GEM_NAME = 'yapra' # what ppl will type to install your gem
7
+ RUBYFORGE_PROJECT = 'yapra' # The unix name for your project
8
+ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
9
+ DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
10
+ EXTRA_DEPENDENCIES = [
11
+ ['mechanize', '>= 0.7.6']
12
+ ] # An array of rubygem dependencies [name, version]
13
+
14
+ @config_file = "~/.rubyforge/user-config.yml"
15
+ @config = nil
16
+ RUBYFORGE_USERNAME = "unknown"
17
+ def rubyforge_username
18
+ unless @config
19
+ begin
20
+ @config = YAML.load(File.read(File.expand_path(@config_file)))
21
+ rescue
22
+ puts <<-EOS
23
+ ERROR: No rubyforge config file found: #{@config_file}
24
+ Run 'rubyforge setup' to prepare your env for access to Rubyforge
25
+ - See http://newgem.rubyforge.org/rubyforge.html for more details
26
+ EOS
27
+ exit
28
+ end
29
+ end
30
+ RUBYFORGE_USERNAME.replace @config["username"]
31
+ end
32
+
33
+
34
+ REV = nil
35
+ # UNCOMMENT IF REQUIRED:
36
+ # REV = YAML.load(`svn info`)['Revision']
37
+ VERS = Yapra::VERSION::STRING + (REV ? ".#{REV}" : "")
38
+ RDOC_OPTS = ['--quiet', '--title', 'yapra documentation',
39
+ "--opname", "index.html",
40
+ "--line-numbers",
41
+ "--main", "README",
42
+ "--inline-source"]
43
+
44
+ class Hoe
45
+ def extra_deps
46
+ @extra_deps.reject! { |x| Array(x).first == 'hoe' }
47
+ @extra_deps
48
+ end
49
+ end
50
+
51
+ # Generate all the Rake tasks
52
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
53
+ $hoe = Hoe.new(GEM_NAME, VERS) do |p|
54
+ p.developer(AUTHOR, EMAIL)
55
+ p.description = DESCRIPTION
56
+ p.summary = DESCRIPTION
57
+ p.url = HOMEPATH
58
+ p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
59
+ p.test_globs = ["test/**/test_*.rb"]
60
+ p.clean_globs |= ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store'] #An array of file patterns to delete on clean.
61
+
62
+ # == Optional
63
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
64
+ #p.extra_deps = EXTRA_DEPENDENCIES
65
+
66
+ p.spec_extras = {
67
+ 'require_paths' => ['lib', 'lib-plugins']
68
+ }
69
+ end
70
+
71
+ CHANGES = $hoe.paragraphs_of('History.txt', 0..1).join("\\n\\n")
72
+ PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
73
+ $hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
74
+ $hoe.rsync_args = '-av --delete --ignore-errors'
75
+ $hoe.spec.post_install_message = File.open(File.dirname(__FILE__) + "/../PostInstall.txt").read rescue ""
@@ -0,0 +1,15 @@
1
+ require 'fileutils'
2
+ include FileUtils
3
+
4
+ require 'rubygems'
5
+ %w[rake hoe newgem rubigen].each do |req_gem|
6
+ begin
7
+ require req_gem
8
+ rescue LoadError
9
+ puts "This Rakefile requires the '#{req_gem}' RubyGem."
10
+ puts "Installation: gem install #{req_gem} -y"
11
+ exit
12
+ end
13
+ end
14
+
15
+ $:.unshift(File.join(File.dirname(__FILE__), %w[.. lib]))
@@ -0,0 +1,45 @@
1
+ ## Download Nicovideo FLV -- IKeJI
2
+ ##
3
+ ## Download from Nicovideo to file
4
+ ##
5
+ ## - module: Download::nicovideo
6
+ ## config:
7
+ ## authfile: nicovideo_auth.yaml
8
+ ## dir: ./nicovideo
9
+
10
+ require 'rubygems'
11
+ require 'mechanize'
12
+ require 'cgi'
13
+
14
+ def nicovideo(config,data)
15
+ auth = YAML.load( File.read( config['authfile'] ) )
16
+ agent = WWW::Mechanize.new
17
+
18
+ page = agent.post("https://secure.nicovideo.jp/secure/login?site=niconico",
19
+ {"mail"=>auth["mail"],"password"=>auth["password"]})
20
+ sleep 3
21
+ data.each do|dat|
22
+ link = dat.link
23
+ next unless link =~ /www\.nicovideo\.jp\/watch\/(.*)/
24
+ id = $1
25
+ next if File.exist?("#{config['dir']}/#{id}.flv")
26
+ begin
27
+ page = agent.get("http://www.nicovideo.jp/api/getflv?v=#{id}")
28
+ sleep 3
29
+ list = CGI.parse(page.body)
30
+ flv = agent.get(link)
31
+ sleep 3
32
+ flv = agent.get(list['url'])
33
+ sleep 3
34
+ File.open("#{config['dir']}/#{id}.flv","w")do |w|
35
+ w.write flv.body
36
+ end
37
+ File.open("#{config['dir']}/list.html","a")do |w|
38
+ w.puts "<h3><a href='#{id}.flv'>#{dat.title}</a></h3><p><a href='#{dat.link}'>#{dat.description}</a>"
39
+ end
40
+ rescue
41
+ STDERR.puts "an error occurred in downloadng FLV #{id}"
42
+ end
43
+ sleep 3
44
+ end
45
+ end
@@ -0,0 +1,87 @@
1
+ ## Read data and convert to feed -- IKeJI
2
+ ##
3
+ ## Read data and convert to feed.
4
+ ##
5
+ ## Example
6
+ ## - module: Feed::custom_feed
7
+ ## config:
8
+ ## url: addr of data -- optional
9
+ ## capture: regex for content -- optional
10
+ ## split: regex for item
11
+ ## title: regex for title
12
+ ## date: regex for date
13
+ ## link: regex for link
14
+ ##
15
+
16
+ require 'open-uri'
17
+ require 'kconv'
18
+
19
+ def custom_feed(config,data)
20
+ open(config['url']){|r| data = [r.read.toutf8] } if(config['url'])
21
+ items = []
22
+ data.each do |input|
23
+ body = ""
24
+ if(config['capture'])
25
+ if input =~ Regexp.new(config['capture'],Regexp::MULTILINE)
26
+ body = $1
27
+ end
28
+ else
29
+ body = input
30
+ end
31
+
32
+ if(config['split'])
33
+ body.gsub(Regexp.new(config['split'],Regexp::MULTILINE)) do
34
+ items.push $1
35
+ end
36
+ else
37
+ items.push body
38
+ end
39
+ end
40
+
41
+ if(config['title'])
42
+ title = Regexp.new(config['title'])
43
+ items.each do|i|
44
+ if i =~ title
45
+ mytitle = $1
46
+ i.instance_eval do
47
+ @title = mytitle
48
+ def title
49
+ @title
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ if(config['date'])
57
+ date = Regexp.new(config['date'])
58
+ items.each do|i|
59
+ if i =~ date
60
+ mydate = Time.parse($1)
61
+ i.instance_eval do
62
+ @date = mydate
63
+ def date
64
+ @date
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ if config['link']
72
+ link = Regexp.new(config['link'])
73
+ items.each do|i|
74
+ if i =~ link
75
+ mylink = config['url'] ? (config['url'] + '#' + $1) : $1
76
+ i.instance_eval do
77
+ @link = mylink
78
+ def link
79
+ @link
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+
86
+ return items
87
+ end
@@ -0,0 +1,51 @@
1
+ ## Read Google Calendar Events -- Soutaro Matsumoto
2
+ ##
3
+ ## Read Events from calendars.
4
+ ## The output will be an array of GooleCalendar::Event.
5
+ ##
6
+ ## - module: feed::google_calendar
7
+ ## config:
8
+ ## mail: your gmail address
9
+ ## pass: your password
10
+ ## calendars:
11
+ ## - the names of
12
+ ## - your calendars
13
+ ## max: 200
14
+
15
+ begin
16
+ require 'rubygems'
17
+ rescue LoadError
18
+ end
19
+ require 'gcalapi'
20
+ require 'date'
21
+
22
+ def google_calendar(config, data)
23
+ today = Date.today
24
+
25
+ pass = config['pass']
26
+ mail = config['mail']
27
+ calendar_pattern = Regexp.union(*config['calendars'].map{|ptn| /#{ptn}/})
28
+ max = config['max'] || 200
29
+
30
+ start_day = today - 30
31
+ end_day = today + 31
32
+
33
+ start_time = Time.mktime(start_day.year, start_day.month, start_day.day)
34
+ end_time = Time.mktime(end_day.year, end_day.month, end_day.day)
35
+
36
+ srv = GoogleCalendar::Service.new(mail, pass)
37
+ cal_list = GoogleCalendar::Calendar.calendars(srv)
38
+
39
+ cal_list.values.select {|cal|
40
+ calendar_pattern =~ cal.title
41
+ }.each {|cal|
42
+ cal.events(:'max-results'=>max,
43
+ :'start-min'=>start_time,
44
+ :'start-max'=>end_time).each {|ev|
45
+ data << ev if ev.st && ev.en && start_time <= ev.st && ev.en <= end_time
46
+ }
47
+ }
48
+
49
+ data
50
+ end
51
+
@@ -0,0 +1,45 @@
1
+ ## get Google search history -- IKeJI
2
+ ##
3
+ ## for example you can get your search keyword 'harahetta'
4
+ ##
5
+ ## -module: Feed::google_search_history
6
+ ## config:
7
+ ## user: hoge
8
+ ## pass: fuga
9
+ ##
10
+
11
+ require 'net/https'
12
+ require 'rss/1.0'
13
+ require 'rss/2.0'
14
+ require 'rss/maker'
15
+
16
+ def google_search_history(config,data)
17
+ Net::HTTP.version_1_2
18
+ req = Net::HTTP::Get.new('/searchhistory/?output=rss')
19
+ req["Accept-Language"] = "ja"
20
+ req["Accept-Charset"] = "utf-8"
21
+ req.basic_auth config['user'],config['pass']
22
+ ht = Net::HTTP.new("www.google.com",443)
23
+ ht.use_ssl = true
24
+ ht.start do |http|
25
+ while(true)
26
+ response = http.request(req)
27
+ if(response.kind_of? Net::HTTPRedirection )
28
+ req = Net::HTTP::Get.new(response['location'])
29
+ req["Accept-Language"] = "ja"
30
+ req["Accept-Charset"] = "utf-8"
31
+ req.basic_auth config['user'],config['pass']
32
+ else
33
+ break
34
+ end
35
+ end
36
+ rss = nil
37
+ begin
38
+ rss = RSS::Parser.parse(response.body)
39
+ rescue RSS::InvalidRSSError
40
+ rss = RSS::Parser.parse(response.body, false)
41
+ end
42
+ return rss.items rescue []
43
+ end
44
+ end
45
+
@@ -0,0 +1,37 @@
1
+ ## Get Hatena Graph data
2
+ ##
3
+ ## hatenaapigraph 0.2.2 is required.
4
+ ##
5
+ ## - module: Feed::hatena_graph
6
+ ## config:
7
+ ## user_id: your-hatena-user-id
8
+ ## password: your-password
9
+ ## graph_name: the-name-of-graph
10
+ ## proxy_host: proxy-host-name (optional)
11
+ ## proxy_port: proxy-port (optional)
12
+ ## proxy_user: proxy-user (optional)
13
+ ## proxy_pass: proxy-password (optional)
14
+
15
+ begin
16
+ require 'rubygems'
17
+ gem 'hatenaapigraph', '>=0.2.2'
18
+ rescue Exception
19
+ end
20
+ require 'hatena/api/graph'
21
+
22
+
23
+ GraphData = Struct.new(:date, :value)
24
+
25
+ def hatena_graph(config, data)
26
+ graph = Hatena::API::Graph.new(config['user_id'], config['password'])
27
+ if config['proxy_host']
28
+ proxy_host = config['proxy_host']
29
+ proxy_port = config['proxy_port']
30
+ proxy_user = config['proxy_user']
31
+ proxy_pass = config['proxy_pass']
32
+ graph.proxy = ::Net::HTTP.Proxy(proxy_host, proxy_port, proxy_user, proxy_pass)
33
+ end
34
+ graph_data = graph.get_data(config['graph_name'])
35
+ graph_data.map{|k,v| GraphData.new(k, v)}.sort{|a,b| a.date<=>b.date}
36
+ end
37
+