Skip to content
This repository has been archived by the owner on Sep 5, 2021. It is now read-only.

Add Hatena::Bookmark #1

Merged
merged 4 commits into from Feb 3, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion lib/feedly.rb
Expand Up @@ -3,8 +3,9 @@
require 'net/http'
require 'uri'
require 'json'
require_relative 'social_service'

class Feedly < FeedService
class Feedly < SocialService
def subscribers
api_uri = 'http://cloud.feedly.com/v3/feeds/feed%2F' + URI.escape(@blog_rss, ':/')
JSON.parse(Net::HTTP.get(URI.parse(api_uri)))['subscribers']
Expand Down
4 changes: 4 additions & 0 deletions lib/growth_forecast.rb
Expand Up @@ -19,6 +19,10 @@ def post_livedoor_reader number
post 'livedoor Reader', number
end

def post_hatena_bookmark number
post 'Hatena::Bookmark', number
end

private

def post graph_name, number
Expand Down
29 changes: 29 additions & 0 deletions lib/hatena_bookmark.rb
@@ -0,0 +1,29 @@
#!/usr/bin/env ruby

require 'net/http'
require 'rexml/document'
require_relative 'social_service'

class HatenaBookmark < SocialService
def count
# http://developer.hatena.ne.jp/ja/documents/bookmark/apis/getcount#total
response = Net::HTTP.new('b.hatena.ne.jp').start do |http|
request = <<EOS
<?xml version="1.0"?>
<methodCall>
<methodName>bookmark.getTotalCount</methodName>
<params>
<param>
<value><string>#{@blog_url}</string></value>
</param>
</params>
</methodCall>
EOS
header = {'Content-Type' => 'text/xml; charset=utf-8', 'Content-Length' => request.bytesize.to_s}
http.request_post '/xmlrpc', request, header
end

doc = REXML::Document.new response.body
doc.elements['/methodResponse/params/param/value/int'].text.to_i
end
end
3 changes: 2 additions & 1 deletion lib/livedoor_reader.rb
Expand Up @@ -2,8 +2,9 @@

require 'net/http'
require 'uri'
require_relative 'social_service'

class LivedoorReader < FeedService
class LivedoorReader < SocialService
def subscribers
api_uri = 'http://rpc.reader.livedoor.com/count?feedlink=' + @blog_rss
Net::HTTP.get(URI.parse api_uri).to_i
Expand Down
3 changes: 2 additions & 1 deletion lib/feed_service.rb → lib/social_service.rb
@@ -1,7 +1,8 @@
#!/usr/bin/env ruby

class FeedService
class SocialService
def initialize settings
@blog_url = settings['blog']['url']
@blog_rss = settings['blog']['rss']
end
end
1 change: 1 addition & 0 deletions main.rb
Expand Up @@ -9,3 +9,4 @@
gf = GrowthForecast.new settings
gf.post_feedly Feedly.new(settings).subscribers
gf.post_livedoor_reader LivedoorReader.new(settings).subscribers
gf.post_hatena_bookmark HatenaBookmark.new(settings).count
2 changes: 2 additions & 0 deletions settings.example.yml
Expand Up @@ -6,5 +6,7 @@ growth_forecast:
section_name:
any_section_name
blog:
url:
http://blog.example.com/
rss:
http://blog.example.com/feed.rss