crown 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +4 -0
- data/README.rdoc +14 -11
- data/VERSION +1 -1
- data/crown.gemspec +15 -5
- data/example/entrylist.rb +69 -0
- data/example/fbcount.rb +1 -1
- data/example/hbentry.rb +1 -1
- data/example/rtcount.rb +1 -0
- data/example/twcount.rb +1 -1
- data/example/{annual.rb → urilist.rb} +21 -26
- data/lib/crown.rb +1 -1
- data/{example/hbtrace.rb → lib/crown/amazon.rb} +8 -23
- data/lib/crown/amazon/crawler.rb +159 -0
- data/lib/crown/amazon/ecs.rb +385 -0
- data/lib/crown/amazon/entrylist.rb +171 -0
- data/lib/crown/backtype.rb +2 -2
- data/lib/crown/buzzurl.rb +2 -2
- data/lib/crown/cgm.rb +8 -0
- data/lib/crown/cgm/countable.rb +1 -1
- data/lib/crown/cgm/summarizable.rb +1 -1
- data/lib/crown/delicious.rb +2 -2
- data/lib/crown/facebook.rb +4 -4
- data/lib/crown/facebook/entry.rb +5 -3
- data/lib/crown/google.rb +38 -0
- data/lib/crown/google/plusone.rb +65 -0
- data/lib/crown/google/plusone/counter.rb +102 -0
- data/lib/crown/hatena/bookmark.rb +7 -7
- data/lib/crown/hatena/bookmark/entry.rb +70 -68
- data/lib/crown/hatena/bookmark/entrylist.rb +98 -0
- data/lib/crown/hatena/bookmark/urilist.rb +349 -0
- data/lib/crown/http-wrapper.rb +0 -1
- data/lib/crown/linkedin.rb +60 -0
- data/lib/crown/linkedin/counter.rb +81 -0
- data/lib/crown/livedoor/clip.rb +2 -2
- data/lib/crown/livedoor/clip/counter.rb +1 -1
- data/lib/crown/livedoor/reader.rb +2 -2
- data/lib/crown/topsy.rb +2 -3
- data/lib/crown/tweetmeme.rb +2 -2
- data/lib/crown/twitter.rb +1 -1
- data/lib/crown/twitter/uri.rb +2 -2
- data/lib/crown/twitter/user.rb +4 -4
- data/lib/crown/twitter/user/entry.rb +26 -6
- data/lib/crown/yahoo/bookmark.rb +3 -7
- data/test/crown-test.rb +34 -12
- metadata +17 -7
- data/lib/crown/hatena/bookmark/linktrace.rb +0 -135
data/lib/crown/backtype.rb
CHANGED
@@ -46,7 +46,7 @@ module Crown
|
|
46
46
|
# BackType で取得した API key).
|
47
47
|
#
|
48
48
|
# ------------------------------------------------------------------- #
|
49
|
-
def Topsy.count(uri, options =
|
49
|
+
def Topsy.count(uri, options = {})
|
50
50
|
return Crown::BackType::URICounter.new.count(uri, options)
|
51
51
|
end
|
52
52
|
|
@@ -61,7 +61,7 @@ module Crown
|
|
61
61
|
# BackType で取得した API key).
|
62
62
|
#
|
63
63
|
# ------------------------------------------------------------------- #
|
64
|
-
def count(uri, options =
|
64
|
+
def count(uri, options = {})
|
65
65
|
return Crown::BackType::URICounter.new.count(uri, options)
|
66
66
|
end
|
67
67
|
end # BackType
|
data/lib/crown/buzzurl.rb
CHANGED
@@ -42,7 +42,7 @@ module Crown
|
|
42
42
|
# 指定した URL のブックマーク数を取得する.
|
43
43
|
#
|
44
44
|
# ------------------------------------------------------------------- #
|
45
|
-
def Buzzurl.count(uri, options =
|
45
|
+
def Buzzurl.count(uri, options = {})
|
46
46
|
return Crown::Buzzurl::BookmarkCounter.new.count(uri, options)
|
47
47
|
end
|
48
48
|
|
@@ -53,7 +53,7 @@ module Crown
|
|
53
53
|
# 指定した URL のブックマーク数を取得する.
|
54
54
|
#
|
55
55
|
# ------------------------------------------------------------------- #
|
56
|
-
def count(uri, options =
|
56
|
+
def count(uri, options = {})
|
57
57
|
return Crown::Buzzurl::BookmarkCounter.new.count(uri, options)
|
58
58
|
end
|
59
59
|
end # Buzzurl
|
data/lib/crown/cgm.rb
CHANGED
@@ -38,6 +38,8 @@ module Crown
|
|
38
38
|
require 'crown/tweetmeme'
|
39
39
|
require 'crown/backtype'
|
40
40
|
require 'crown/facebook'
|
41
|
+
require 'crown/google'
|
42
|
+
require 'crown/linkedin'
|
41
43
|
require 'crown/hatena/bookmark'
|
42
44
|
require 'crown/livedoor/clip'
|
43
45
|
require 'crown/livedoor/reader'
|
@@ -62,6 +64,10 @@ module Crown
|
|
62
64
|
# http://backtweets.com/
|
63
65
|
# - Facebook
|
64
66
|
# http://www.facebook.com/
|
67
|
+
# - Google+1
|
68
|
+
# http://www.google.com/intl/ja/+1/button/
|
69
|
+
# - LinkedIn
|
70
|
+
# http://www.linkedin.com/
|
65
71
|
# - はてなブックマーク
|
66
72
|
# http://b.hatena.ne.jp/
|
67
73
|
# - Livedoor クリップ
|
@@ -84,6 +90,8 @@ module Crown
|
|
84
90
|
when :tweetmeme then return Crown::TweetMeme.new
|
85
91
|
when :backtype then return Crown::BackType.new
|
86
92
|
when :facebook then return Crown::Facebook.new
|
93
|
+
when :google_plus1 then return Crown::Google::PlusOne.new
|
94
|
+
when :linkedin then return Crown::LinkedIn.new
|
87
95
|
when :hatena_bookmark then return Crown::Hatena::Bookmark.new
|
88
96
|
when :livedoor_clip then return Crown::Livedoor::Clip.new
|
89
97
|
when :livedoor_reader then return Crown::Livedoor::Reader.new
|
data/lib/crown/cgm/countable.rb
CHANGED
@@ -106,7 +106,7 @@ module Crown
|
|
106
106
|
# --------------------------------------------------------------- #
|
107
107
|
# count
|
108
108
|
# --------------------------------------------------------------- #
|
109
|
-
def count(uri, options =
|
109
|
+
def count(uri, options = {})
|
110
110
|
begin
|
111
111
|
proxy_addr = nil
|
112
112
|
proxy_port = nil
|
@@ -106,7 +106,7 @@ module Crown
|
|
106
106
|
# --------------------------------------------------------------- #
|
107
107
|
# summary
|
108
108
|
# --------------------------------------------------------------- #
|
109
|
-
def summary(uri, options =
|
109
|
+
def summary(uri, options = {})
|
110
110
|
begin
|
111
111
|
proxy_addr = nil
|
112
112
|
proxy_port = nil
|
data/lib/crown/delicious.rb
CHANGED
@@ -42,7 +42,7 @@ module Crown
|
|
42
42
|
# 指定した URL のブックマーク数を取得する.
|
43
43
|
#
|
44
44
|
# ------------------------------------------------------------------- #
|
45
|
-
def Delicious.count(uri, options =
|
45
|
+
def Delicious.count(uri, options = {})
|
46
46
|
return Crown::Delicious::BookmarkCounter.new.count(uri, options)
|
47
47
|
end
|
48
48
|
|
@@ -53,7 +53,7 @@ module Crown
|
|
53
53
|
# 指定した URL のブックマーク数を取得する.
|
54
54
|
#
|
55
55
|
# ------------------------------------------------------------------- #
|
56
|
-
def count(uri, options =
|
56
|
+
def count(uri, options = {})
|
57
57
|
return Crown::Delicious::BookmarkCounter.new.count(uri, options)
|
58
58
|
end
|
59
59
|
end # Delicious
|
data/lib/crown/facebook.rb
CHANGED
@@ -44,14 +44,14 @@ module Crown
|
|
44
44
|
# 合計数)を取得する.
|
45
45
|
#
|
46
46
|
# ------------------------------------------------------------------- #
|
47
|
-
def Facebook.count(uri, options =
|
47
|
+
def Facebook.count(uri, options = {})
|
48
48
|
return Crown::FacebookCounter.new.count(uri, options)
|
49
49
|
end
|
50
50
|
|
51
51
|
# ------------------------------------------------------------------- #
|
52
52
|
# Facebook.summary
|
53
53
|
# ------------------------------------------------------------------- #
|
54
|
-
def Facebook.summary(uri, options =
|
54
|
+
def Facebook.summary(uri, options = {})
|
55
55
|
return Crown::FacebookEntry.new.summary(uri, options)
|
56
56
|
end
|
57
57
|
|
@@ -63,14 +63,14 @@ module Crown
|
|
63
63
|
# 合計数)を取得する.
|
64
64
|
#
|
65
65
|
# ------------------------------------------------------------------- #
|
66
|
-
def count(uri, options =
|
66
|
+
def count(uri, options = {})
|
67
67
|
return Crown::FacebookCounter.new.count(uri, options)
|
68
68
|
end
|
69
69
|
|
70
70
|
# ------------------------------------------------------------------- #
|
71
71
|
# summary
|
72
72
|
# ------------------------------------------------------------------- #
|
73
|
-
def summary(uri, options =
|
73
|
+
def summary(uri, options = {})
|
74
74
|
return Crown::FacebookEntry.new.summary(uri, options)
|
75
75
|
end
|
76
76
|
end # Facebook
|
data/lib/crown/facebook/entry.rb
CHANGED
@@ -45,7 +45,7 @@ module Crown
|
|
45
45
|
# ------------------------------------------------------------------- #
|
46
46
|
# structures
|
47
47
|
# ------------------------------------------------------------------- #
|
48
|
-
Response = Struct.new(:like, :total, :share, :click)
|
48
|
+
Response = Struct.new(:like, :total, :share, :click, :comment, :commentsbox)
|
49
49
|
|
50
50
|
private
|
51
51
|
# --------------------------------------------------------------- #
|
@@ -66,7 +66,7 @@ module Crown
|
|
66
66
|
# query
|
67
67
|
# --------------------------------------------------------------- #
|
68
68
|
def query(uri, options)
|
69
|
-
str = 'select like_count, total_count, share_count, click_count from link_stat where url="' + uri + '"'
|
69
|
+
str = 'select like_count, total_count, share_count, click_count, comment_count, commentsbox_count from link_stat where url="' + uri + '"'
|
70
70
|
return '?query=' + CGI.escape(str)
|
71
71
|
end
|
72
72
|
|
@@ -76,10 +76,12 @@ module Crown
|
|
76
76
|
def parse(body)
|
77
77
|
xml = REXML::Document.new(body)
|
78
78
|
result = Response.new
|
79
|
-
result.like
|
79
|
+
result.like = xml.elements['/fql_query_response/link_stat/like_count'].text.to_i
|
80
80
|
result.total = xml.elements['/fql_query_response/link_stat/total_count'].text.to_i
|
81
81
|
result.share = xml.elements['/fql_query_response/link_stat/share_count'].text.to_i
|
82
82
|
result.click = xml.elements['/fql_query_response/link_stat/click_count'].text.to_i
|
83
|
+
result.comment = xml.elements['/fql_query_response/link_stat/comment_count'].text.to_i
|
84
|
+
result.commentsbox = xml.elements['/fql_query_response/link_stat/commentsbox_count'].text.to_i
|
83
85
|
return result
|
84
86
|
end
|
85
87
|
end # FacebookCounter
|
data/lib/crown/google.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# --------------------------------------------------------------------------- #
|
3
|
+
#
|
4
|
+
# google.rb
|
5
|
+
#
|
6
|
+
# Copyright (c) 2008 - 2012, clown.
|
7
|
+
#
|
8
|
+
# Redistribution and use in source and binary forms, with or without
|
9
|
+
# modification, are permitted provided that the following conditions
|
10
|
+
# are met:
|
11
|
+
#
|
12
|
+
# - Redistributions of source code must retain the above copyright
|
13
|
+
# notice, this list of conditions and the following disclaimer.
|
14
|
+
# - Redistributions in binary form must reproduce the above copyright
|
15
|
+
# notice, this list of conditions and the following disclaimer in the
|
16
|
+
# documentation and/or other materials provided with the distribution.
|
17
|
+
# - No names of its contributors may be used to endorse or promote
|
18
|
+
# products derived from this software without specific prior written
|
19
|
+
# permission.
|
20
|
+
#
|
21
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
22
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
23
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
24
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
25
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
26
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
27
|
+
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
28
|
+
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
29
|
+
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
30
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
31
|
+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
32
|
+
#
|
33
|
+
# --------------------------------------------------------------------------- #
|
34
|
+
module Crown
|
35
|
+
module Google
|
36
|
+
require 'crown/google/plusone'
|
37
|
+
end # Google
|
38
|
+
end # Crown
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# --------------------------------------------------------------------------- #
|
3
|
+
#
|
4
|
+
# google/plusone.rb
|
5
|
+
#
|
6
|
+
# Copyright (c) 2008 - 2012, clown.
|
7
|
+
#
|
8
|
+
# Redistribution and use in source and binary forms, with or without
|
9
|
+
# modification, are permitted provided that the following conditions
|
10
|
+
# are met:
|
11
|
+
#
|
12
|
+
# - Redistributions of source code must retain the above copyright
|
13
|
+
# notice, this list of conditions and the following disclaimer.
|
14
|
+
# - Redistributions in binary form must reproduce the above copyright
|
15
|
+
# notice, this list of conditions and the following disclaimer in the
|
16
|
+
# documentation and/or other materials provided with the distribution.
|
17
|
+
# - No names of its contributors may be used to endorse or promote
|
18
|
+
# products derived from this software without specific prior written
|
19
|
+
# permission.
|
20
|
+
#
|
21
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
22
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
23
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
24
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
25
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
26
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
27
|
+
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
28
|
+
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
29
|
+
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
30
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
31
|
+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
32
|
+
#
|
33
|
+
# --------------------------------------------------------------------------- #
|
34
|
+
module Crown
|
35
|
+
module Google
|
36
|
+
# ------------------------------------------------------------------- #
|
37
|
+
# PlusOne
|
38
|
+
# ------------------------------------------------------------------- #
|
39
|
+
class PlusOne
|
40
|
+
require 'crown/google/plusone/counter'
|
41
|
+
|
42
|
+
# --------------------------------------------------------------- #
|
43
|
+
#
|
44
|
+
# PlusOne.count
|
45
|
+
#
|
46
|
+
# 指定した URL のカウント数を取得する
|
47
|
+
#
|
48
|
+
# --------------------------------------------------------------- #
|
49
|
+
def PlusOne.count(uri, options = {})
|
50
|
+
return Crown::Google::PlusOne::URICounter.new.count(uri, options)
|
51
|
+
end
|
52
|
+
|
53
|
+
# --------------------------------------------------------------- #
|
54
|
+
#
|
55
|
+
# count
|
56
|
+
#
|
57
|
+
# 指定した URL のカウント数を取得する
|
58
|
+
#
|
59
|
+
# --------------------------------------------------------------- #
|
60
|
+
def count(uri, options = {})
|
61
|
+
return Crown::Google::PlusOne::URICounter.new.count(uri, options)
|
62
|
+
end
|
63
|
+
end # Bookmark
|
64
|
+
end # Google
|
65
|
+
end # Crown
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# --------------------------------------------------------------------------- #
|
3
|
+
#
|
4
|
+
# google/plusone/counter.rb
|
5
|
+
#
|
6
|
+
# Copyright (c) 2008 - 2012, clown.
|
7
|
+
#
|
8
|
+
# Redistribution and use in source and binary forms, with or without
|
9
|
+
# modification, are permitted provided that the following conditions
|
10
|
+
# are met:
|
11
|
+
#
|
12
|
+
# - Redistributions of source code must retain the above copyright
|
13
|
+
# notice, this list of conditions and the following disclaimer.
|
14
|
+
# - Redistributions in binary form must reproduce the above copyright
|
15
|
+
# notice, this list of conditions and the following disclaimer in the
|
16
|
+
# documentation and/or other materials provided with the distribution.
|
17
|
+
# - No names of its contributors may be used to endorse or promote
|
18
|
+
# products derived from this software without specific prior written
|
19
|
+
# permission.
|
20
|
+
#
|
21
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
22
|
+
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
23
|
+
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
24
|
+
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
25
|
+
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
26
|
+
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
27
|
+
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
28
|
+
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
29
|
+
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
30
|
+
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
31
|
+
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
32
|
+
#
|
33
|
+
# --------------------------------------------------------------------------- #
|
34
|
+
module Crown
|
35
|
+
module Google
|
36
|
+
class PlusOne
|
37
|
+
# --------------------------------------------------------------- #
|
38
|
+
#
|
39
|
+
# URICounter
|
40
|
+
#
|
41
|
+
# NOTE: 現在,Google+1 のカウント数を取得するためには API key
|
42
|
+
# を要求される.そのため,暫定的な回避策としてサードパーティ
|
43
|
+
# から提供されている API を経由してカウント数を取得している.
|
44
|
+
#
|
45
|
+
# Google+1 counts are retrieved via a JSON-RPC POST call.
|
46
|
+
# POST URL:
|
47
|
+
# https://clients6.google.com/rpc?key=<your_api_key>
|
48
|
+
# POST Body:
|
49
|
+
# [{"method":"pos.plusones.get","id":"p",
|
50
|
+
# "params":{"nolog":true,"id":"%%URL%%","source":"widget",
|
51
|
+
# "userId":"@viewer","groupId":"@self"
|
52
|
+
# },
|
53
|
+
# "jsonrpc":"2.0","key":"p","apiVersion":"v1"
|
54
|
+
# }]
|
55
|
+
#
|
56
|
+
# see also: http://sharedcount.com/
|
57
|
+
#
|
58
|
+
# --------------------------------------------------------------- #
|
59
|
+
class URICounter
|
60
|
+
require 'cgi'
|
61
|
+
require 'crown/cgm/countable'
|
62
|
+
require 'rubygems'
|
63
|
+
require 'json'
|
64
|
+
|
65
|
+
# ----------------------------------------------------------- #
|
66
|
+
# Mix-in modules
|
67
|
+
# ----------------------------------------------------------- #
|
68
|
+
include Crown::CGM::Countable
|
69
|
+
|
70
|
+
private
|
71
|
+
# ----------------------------------------------------------- #
|
72
|
+
# address
|
73
|
+
# ----------------------------------------------------------- #
|
74
|
+
def address()
|
75
|
+
return 'api.sharedcount.com'
|
76
|
+
end
|
77
|
+
|
78
|
+
# ----------------------------------------------------------- #
|
79
|
+
# path
|
80
|
+
# ----------------------------------------------------------- #
|
81
|
+
def path()
|
82
|
+
return '/'
|
83
|
+
end
|
84
|
+
|
85
|
+
# ----------------------------------------------------------- #
|
86
|
+
# query
|
87
|
+
# ----------------------------------------------------------- #
|
88
|
+
def query(uri, options)
|
89
|
+
return '?url=' + CGI.escape(uri)
|
90
|
+
end
|
91
|
+
|
92
|
+
# ----------------------------------------------------------- #
|
93
|
+
# parse
|
94
|
+
# ----------------------------------------------------------- #
|
95
|
+
def parse(body)
|
96
|
+
json = JSON.parse(body)
|
97
|
+
return json["GooglePlusOne"].to_i
|
98
|
+
end
|
99
|
+
end # URICounter
|
100
|
+
end # PlusOne
|
101
|
+
end # Google
|
102
|
+
end # Crown
|
@@ -42,7 +42,7 @@ module Crown
|
|
42
42
|
# --------------------------------------------------------------- #
|
43
43
|
class Bookmark
|
44
44
|
require 'crown/hatena/bookmark/counter'
|
45
|
-
require 'crown/hatena/bookmark/
|
45
|
+
require 'crown/hatena/bookmark/entrylist'
|
46
46
|
|
47
47
|
# --------------------------------------------------------------- #
|
48
48
|
#
|
@@ -51,7 +51,7 @@ module Crown
|
|
51
51
|
# 指定した URL のブックマーク数を取得する
|
52
52
|
#
|
53
53
|
# --------------------------------------------------------------- #
|
54
|
-
def Bookmark.count(uri, options =
|
54
|
+
def Bookmark.count(uri, options = {})
|
55
55
|
return Crown::Hatena::BookmarkCounter.new.count(uri, options)
|
56
56
|
end
|
57
57
|
|
@@ -62,8 +62,8 @@ module Crown
|
|
62
62
|
# 指定した URL のブックマーク情報を取得する
|
63
63
|
#
|
64
64
|
# --------------------------------------------------------------- #
|
65
|
-
def Bookmark.summary(uri, options =
|
66
|
-
return Crown::Hatena::
|
65
|
+
def Bookmark.summary(uri, options = {})
|
66
|
+
return Crown::Hatena::Bookmark::Entry.new.summary(uri, options)
|
67
67
|
end
|
68
68
|
|
69
69
|
# --------------------------------------------------------------- #
|
@@ -73,7 +73,7 @@ module Crown
|
|
73
73
|
# 指定した URL のブックマーク数を取得する
|
74
74
|
#
|
75
75
|
# --------------------------------------------------------------- #
|
76
|
-
def count(uri, options =
|
76
|
+
def count(uri, options = {})
|
77
77
|
return Crown::Hatena::BookmarkCounter.new.count(uri, options)
|
78
78
|
end
|
79
79
|
|
@@ -84,8 +84,8 @@ module Crown
|
|
84
84
|
# 指定した URL のブックマーク情報を取得する
|
85
85
|
#
|
86
86
|
# --------------------------------------------------------------- #
|
87
|
-
def summary(uri, options =
|
88
|
-
return Crown::Hatena::
|
87
|
+
def summary(uri, options = {})
|
88
|
+
return Crown::Hatena::Bookmark::Entry.new.summary(uri, options)
|
89
89
|
end
|
90
90
|
end # Bookmark
|
91
91
|
end # Hatena
|
@@ -33,76 +33,78 @@
|
|
33
33
|
# --------------------------------------------------------------------------- #
|
34
34
|
module Crown
|
35
35
|
module Hatena
|
36
|
-
|
37
|
-
# BookmarkEntry
|
38
|
-
# --------------------------------------------------------------- #
|
39
|
-
class BookmarkEntry
|
40
|
-
require 'cgi'
|
41
|
-
require 'crown/cgm/summarizable'
|
42
|
-
require 'rubygems'
|
43
|
-
require 'json'
|
44
|
-
|
36
|
+
class Bookmark
|
45
37
|
# --------------------------------------------------------------- #
|
46
|
-
#
|
38
|
+
# Entry
|
47
39
|
# --------------------------------------------------------------- #
|
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
|
-
|
40
|
+
class Entry
|
41
|
+
require 'cgi'
|
42
|
+
require 'crown/cgm/summarizable'
|
43
|
+
require 'rubygems'
|
44
|
+
require 'json'
|
45
|
+
|
46
|
+
# ----------------------------------------------------------- #
|
47
|
+
# Mix-in modules
|
48
|
+
# ----------------------------------------------------------- #
|
49
|
+
include Crown::CGM::Summarizable
|
50
|
+
|
51
|
+
# ----------------------------------------------------------- #
|
52
|
+
# structures
|
53
|
+
# ----------------------------------------------------------- #
|
54
|
+
User = Struct.new(:tags, :date, :comment)
|
55
|
+
Related = Struct.new(:eid, :uri, :title, :count)
|
56
|
+
Response = Struct.new(:eid, :uri, :image, :title, :count, :users, :related)
|
57
|
+
|
58
|
+
private
|
59
|
+
# ----------------------------------------------------------- #
|
60
|
+
# address
|
61
|
+
# ----------------------------------------------------------- #
|
62
|
+
def address()
|
63
|
+
return 'b.hatena.ne.jp'
|
64
|
+
end
|
65
|
+
|
66
|
+
# ----------------------------------------------------------- #
|
67
|
+
# path
|
68
|
+
# ----------------------------------------------------------- #
|
69
|
+
def path()
|
70
|
+
return '/entry/json/'
|
71
|
+
end
|
72
|
+
|
73
|
+
# ----------------------------------------------------------- #
|
74
|
+
# query
|
75
|
+
# ----------------------------------------------------------- #
|
76
|
+
def query(uri, options)
|
77
|
+
return '?url=' + CGI.escape(uri)
|
78
|
+
end
|
79
|
+
|
80
|
+
# ----------------------------------------------------------- #
|
81
|
+
# parse
|
82
|
+
# ----------------------------------------------------------- #
|
83
|
+
def parse(body)
|
84
|
+
json = JSON.parse(body)
|
85
|
+
|
86
|
+
# ���[�U���̉��
|
87
|
+
users = Hash.new
|
88
|
+
json['bookmarks'].each { |item|
|
89
|
+
tags = Array.new
|
90
|
+
item['tags'].each { |tag|
|
91
|
+
tags.push(tag)
|
92
|
+
}
|
93
|
+
date = Time.local(*item['timestamp'].split(/\W/))
|
94
|
+
entry = User.new(tags, date, item['comment'])
|
95
|
+
users[item['user']] = entry
|
96
|
+
}
|
97
|
+
|
98
|
+
# �֘A�L���̉��
|
99
|
+
related = Array.new()
|
100
|
+
json['related'].each { |item|
|
101
|
+
entry = Related.new(item['eid'].to_i, item['url'], item['title'], item['count'].to_i)
|
102
|
+
related.push(entry)
|
91
103
|
}
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
# �֘A�L���̉��
|
98
|
-
related = Array.new()
|
99
|
-
json['related'].each { |item|
|
100
|
-
entry = Related.new(item['eid'].to_i, item['url'], item['title'], item['count'].to_i)
|
101
|
-
related.push(entry)
|
102
|
-
}
|
103
|
-
|
104
|
-
return Response.new(json['eid'].to_i, json['url'], json['screenshot'], json['title'], json['count'].to_i, users, related)
|
105
|
-
end
|
106
|
-
end # BookmarkEntry
|
104
|
+
|
105
|
+
return Response.new(json['eid'].to_i, json['url'], json['screenshot'], json['title'], json['count'].to_i, users, related)
|
106
|
+
end
|
107
|
+
end # Entry
|
108
|
+
end # Bookmark
|
107
109
|
end # Hatena
|
108
110
|
end # Crown
|