muri 0.0.5 → 0.0.6
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.
- data/README.textile +6 -4
- data/VERSION.yml +1 -1
- data/lib/muri/base.rb +1 -0
- data/lib/muri/filters/facebook.rb +4 -8
- data/lib/muri/filters/flickr.rb +1 -1
- data/lib/muri/filters/imageshack.rb +3 -3
- data/lib/muri/filters/twitpic.rb +46 -0
- data/lib/muri/filters/vimeo.rb +5 -1
- data/lib/muri/filters/youtube.rb +2 -2
- data/muri.gemspec +5 -2
- data/test/facebook_test.rb +1 -1
- data/test/twitpic_test.rb +42 -0
- metadata +5 -2
data/README.textile
CHANGED
@@ -12,6 +12,8 @@ MURI Currently supports:
|
|
12
12
|
* Imageshack
|
13
13
|
* Photobucket
|
14
14
|
** "API documentation":http://photobucket.com/developer/documentation
|
15
|
+
* Twitpic
|
16
|
+
** "API documentation":http://twitpic.com/api.do
|
15
17
|
* Facebook
|
16
18
|
** "API documentation":http://wiki.developers.facebook.com/index.php/API
|
17
19
|
|
@@ -56,11 +58,11 @@ Assuming the URI was successfully parsed (thus @a.valid? == true@), all media ty
|
|
56
58
|
</code>
|
57
59
|
</pre>
|
58
60
|
|
59
|
-
*NOTE: Facebook photos return a
|
61
|
+
*NOTE: Facebook photos return a @media_api_id@ which can be used to search for photo information in a Facebook photos.get API call as the pid. This pid is NOT the same as the pid found in the query string (the @media_id@)*
|
60
62
|
|
61
63
|
* Services with a @media_api_id@ also have a @media_api_type@, which indicates what sort of API call should be made (be it 'photo', 'video', 'media', 'set', 'album', or 'playlist', depending on URI type)
|
62
64
|
|
63
|
-
* A direct media url for Youtube, Photobucket, and Imageshack (@http://img#{num}.imageshack.us/img#{num}/#{NUMBER}/#{IMAGENAME}@ format)
|
65
|
+
* A direct media url for Youtube, Photobucket, Twitpic, and Imageshack (@http://img#{num}.imageshack.us/img#{num}/#{NUMBER}/#{IMAGENAME}@ format)
|
64
66
|
|
65
67
|
<pre>
|
66
68
|
<code>
|
@@ -68,7 +70,7 @@ Assuming the URI was successfully parsed (thus @a.valid? == true@), all media ty
|
|
68
70
|
</code>
|
69
71
|
</pre>
|
70
72
|
|
71
|
-
* A media landing website url for Youtube, Photobucket, Imageshack, Vimeo, and Flickr (flickr media_url's provide the @http://flic.kr/p/#{ID}@ short url)
|
73
|
+
* A media landing website url for Youtube, Photobucket, Imageshack, Vimeo, Twitpic, and Flickr (flickr media_url's provide the @http://flic.kr/p/#{ID}@ short url)
|
72
74
|
|
73
75
|
<pre>
|
74
76
|
<code>
|
@@ -84,7 +86,7 @@ Assuming the URI was successfully parsed (thus @a.valid? == true@), all media ty
|
|
84
86
|
</code>
|
85
87
|
</pre>
|
86
88
|
|
87
|
-
* Thumbnails URL for Youtube Photobucket, and Flickr (flickr in the @http://farm#{num}.static.flickr.com/@ format)
|
89
|
+
* Thumbnails URL for Youtube Photobucket, Twitpic, and Flickr (flickr in the @http://farm#{num}.static.flickr.com/@ format)
|
88
90
|
|
89
91
|
<pre>
|
90
92
|
<code>
|
data/VERSION.yml
CHANGED
data/lib/muri/base.rb
CHANGED
@@ -1,10 +1,4 @@
|
|
1
1
|
require 'cgi'
|
2
|
-
## Best way I have been able to find to use the facebook API to fetch photo information is as follows:
|
3
|
-
## First, get a list of all user photos (using media_id). Parse each resulting <photo> element until you
|
4
|
-
## find one where <link> equals
|
5
|
-
## 'http://www.facebook.com/photo.php?pid=#{media_api_id[:pid]}&id=#{media_api_id[:user_id]}'
|
6
|
-
##
|
7
|
-
## Sucks a whole lot, but facebook seems to no longer allow API calls using the PID from the query string.
|
8
2
|
class Muri
|
9
3
|
module Filter
|
10
4
|
module Facebook
|
@@ -38,7 +32,9 @@ class Muri
|
|
38
32
|
share_key = params["l"].first
|
39
33
|
|
40
34
|
@info[:website] = "#{url_common}/photo.php?pid=#{@info[:media_id]}&l=#{share_key}&id=#{media_creator}"
|
41
|
-
|
35
|
+
|
36
|
+
# The media_api_id is the PID which can be searched for in the facebook photos table
|
37
|
+
@info[:media_api_id] = (media_creator << 32) + @info[:media_id]
|
42
38
|
end
|
43
39
|
end
|
44
40
|
|
@@ -59,8 +55,8 @@ class Muri
|
|
59
55
|
end
|
60
56
|
end
|
61
57
|
end
|
62
|
-
|
63
58
|
# http://www.facebook.com/photo.php?pid=34929102&l=a1abf8cd37&id=15201063 (preview)
|
59
|
+
# database_pid = (USER_ID << 32) + PID
|
64
60
|
# pid = photo id
|
65
61
|
# id = user id
|
66
62
|
# l = photo share key
|
data/lib/muri/filters/flickr.rb
CHANGED
@@ -45,7 +45,7 @@ class Muri
|
|
45
45
|
if @info[:media_api_type] == FLICKR_PHOTO
|
46
46
|
@info[:website] = "http://flic.kr/p/" + self.class.encode58(@info[:media_id].to_i)
|
47
47
|
elsif @info[:media_api_type] == FLICKR_SET
|
48
|
-
@info[:website] = "http://www.flickr.com/photos/#{media_creator}/sets/#{@info[:media_id]}"
|
48
|
+
@info[:website] = "http://www.flickr.com/photos/#{media_creator}/sets/#{@info[:media_id]}"#/show takes direct
|
49
49
|
end
|
50
50
|
else
|
51
51
|
raise UnsupportedURI
|
@@ -15,10 +15,10 @@ class Muri
|
|
15
15
|
server_id = $1
|
16
16
|
url_common = "http://img#{server_id}.imageshack.us"
|
17
17
|
|
18
|
-
if @url.path =~ /^\/i\/([a-z0-9]
|
18
|
+
if @url.path =~ /^\/i\/([a-z0-9]+?)\.([a-z0-9]+?)\//i
|
19
19
|
@info[:media_id] = $1
|
20
20
|
@info[:content_type] = $2
|
21
|
-
elsif @url.path =~ /^\/img([0-9]*?)\/([0-9]
|
21
|
+
elsif @url.path =~ /^\/img([0-9]*?)\/([0-9]+?)\/([a-z0-9]+?)\.([a-z0-9]+?)/i
|
22
22
|
content_path_id = $2
|
23
23
|
@info[:media_id] = $3
|
24
24
|
@info[:content_type] = $4
|
@@ -48,4 +48,4 @@ end
|
|
48
48
|
|
49
49
|
# http://img30.imageshack.us/img30/4184/rush02.mp4
|
50
50
|
# http://img30.imageshack.us/i/rush02.mp4/
|
51
|
-
# http://yfrog.us/0urush02z
|
51
|
+
# http://yfrog.us/0urush02z => http://code.google.com/p/imageshackapi/wiki/YFROGurls
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class Muri
|
2
|
+
module Filter
|
3
|
+
module Twitpic
|
4
|
+
|
5
|
+
TWITPIC_PHOTO = 'photo'
|
6
|
+
|
7
|
+
def self.included(base)
|
8
|
+
base.class_eval do
|
9
|
+
self::PARSERS[Muri::Filter::Twitpic] = "twitpic_parse"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def twitpic_parse
|
14
|
+
@info[:service] = 'Twitpic'
|
15
|
+
url_common = "http://twitpic.com"
|
16
|
+
|
17
|
+
if @url.path =~ /^([a-z0-9]+)/i
|
18
|
+
@info[:media_id] = $1
|
19
|
+
@info[:website] = "#{url_common}/#{@info[:media_id]}"
|
20
|
+
@info[:media_url] = "#{url_common}/show/large/#{@info[:media_id]}"
|
21
|
+
@info[:media_thumbnail] = "#{url_common}/show/thumb/#{@info[:media_id]}"
|
22
|
+
@info[:media_api_type] = TWITPIC_PHOTO
|
23
|
+
end
|
24
|
+
|
25
|
+
# Twitpic does not have an API to pull photo info. Media ID is best guess
|
26
|
+
if self.valid?
|
27
|
+
@info[:media_api_id] = @info[:media_id]
|
28
|
+
else
|
29
|
+
raise UnsupportedURI
|
30
|
+
end
|
31
|
+
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.parsable?(uri)
|
36
|
+
uri.host =~ /^twitpic\.com$/i
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
# http://twitpic.com/17d7th
|
43
|
+
# http://twitpic.com/show/large/17d7th
|
44
|
+
# http://twitpic.com/show/thumb/17d7th
|
45
|
+
|
46
|
+
# http://twitpic.com/api.do
|
data/lib/muri/filters/vimeo.rb
CHANGED
@@ -19,8 +19,11 @@ class Muri
|
|
19
19
|
if @url.path =~ /^\/(album\/)?([0-9]+)(\/)?$/i
|
20
20
|
@info[:media_id] = $2
|
21
21
|
@info[:media_api_type] = $1.nil? ? VIMEO_VIDEO : VIMEO_ALBUM
|
22
|
+
elsif @url.path =~ /^\/groups\/([0-9a-z\@\-\_]+)\/videos\/([0-9]+)(\/)?$/i
|
23
|
+
@info[:media_id] = $2
|
24
|
+
@info[:media_api_type] = VIMEO_VIDEO
|
22
25
|
elsif ((@url.path =~ /^\/moogaloop\.swf/i) && (params.include?("clip_id")))
|
23
|
-
@info[:media_id] = params["clip_id"].first if (params["clip_id"].first =~ /([0-9]
|
26
|
+
@info[:media_id] = params["clip_id"].first if (params["clip_id"].first =~ /([0-9]+)/)
|
24
27
|
@info[:media_api_type] = VIMEO_VIDEO
|
25
28
|
end
|
26
29
|
|
@@ -42,6 +45,7 @@ class Muri
|
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
48
|
+
# http://www.vimeo.com/groups/beyondthestill/videos/9394829
|
45
49
|
# http://vimeo.com/moogaloop.swf?clip_id=7312128&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1"
|
46
50
|
# http://vimeo.com/7312128
|
47
51
|
# http://vimeo.com/album/89702
|
data/lib/muri/filters/youtube.rb
CHANGED
@@ -20,10 +20,10 @@ class Muri
|
|
20
20
|
if (@url.path =~ /\/watch$/i) && params.include?("v")
|
21
21
|
@info[:media_id] = params["v"].first
|
22
22
|
@info[:media_api_type] = YOUTUBE_VIDEO
|
23
|
-
elsif (@url.path =~ /\/v\/([a-z0-9\-\_]
|
23
|
+
elsif (@url.path =~ /\/v\/([a-z0-9\-\_]+)/i)
|
24
24
|
@info[:media_id] = $1
|
25
25
|
@info[:media_api_type] = YOUTUBE_VIDEO
|
26
|
-
elsif (@url.path =~ /\/p\/([a-z0-9\-\_]
|
26
|
+
elsif (@url.path =~ /\/p\/([a-z0-9\-\_]+)/i)
|
27
27
|
@info[:media_id] = $1
|
28
28
|
@info[:media_api_type] = YOUTUBE_PLAYLIST
|
29
29
|
elsif (@url.path =~ /^\/view\_play\_list/i) && (params.include?('p'))
|
data/muri.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{muri}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["William Schneider"]
|
12
|
-
s.date = %q{2010-03-
|
12
|
+
s.date = %q{2010-03-09}
|
13
13
|
s.description = %q{Automatically get media information from the URL.}
|
14
14
|
s.email = %q{bananastalktome@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"lib/muri/filters/flickr.rb",
|
28
28
|
"lib/muri/filters/imageshack.rb",
|
29
29
|
"lib/muri/filters/photobucket.rb",
|
30
|
+
"lib/muri/filters/twitpic.rb",
|
30
31
|
"lib/muri/filters/vimeo.rb",
|
31
32
|
"lib/muri/filters/youtube.rb",
|
32
33
|
"muri.gemspec",
|
@@ -35,6 +36,7 @@ Gem::Specification.new do |s|
|
|
35
36
|
"test/flickr_test.rb",
|
36
37
|
"test/imageshack_test.rb",
|
37
38
|
"test/photobucket_test.rb",
|
39
|
+
"test/twitpic_test.rb",
|
38
40
|
"test/vimeo_test.rb",
|
39
41
|
"test/youtube_test.rb"
|
40
42
|
]
|
@@ -49,6 +51,7 @@ Gem::Specification.new do |s|
|
|
49
51
|
"test/flickr_test.rb",
|
50
52
|
"test/imageshack_test.rb",
|
51
53
|
"test/photobucket_test.rb",
|
54
|
+
"test/twitpic_test.rb",
|
52
55
|
"test/vimeo_test.rb",
|
53
56
|
"test/youtube_test.rb"
|
54
57
|
]
|
data/test/facebook_test.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'lib/muri.rb'
|
2
|
+
shared_examples_for "Twitpic parse" do
|
3
|
+
it "should be Twitpic service" do
|
4
|
+
@a.service == 'Twitpic'
|
5
|
+
end
|
6
|
+
it "should be valid" do
|
7
|
+
@a.valid? == true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
shared_examples_for "Twitpic parse photo" do
|
12
|
+
it_should_behave_like "Twitpic parse"
|
13
|
+
it "should have media api type = TWITPIC_PHOTO" do
|
14
|
+
@a.media_api_type == Muri::TWITPIC_PHOTO
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "Twitpic parse first" do
|
19
|
+
before(:all) do
|
20
|
+
@a = Muri.parse 'http://twitpic.com/17d7th'
|
21
|
+
end
|
22
|
+
it_should_behave_like "Twitpic parse photo"
|
23
|
+
it "should have media id" do
|
24
|
+
@a.media_id == '17d7th'
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should have a website" do
|
28
|
+
@a.website == "http://twitpic.com/17d7th"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should have media api id" do
|
32
|
+
@a.media_api_id == '17d7th'
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should have media url" do
|
36
|
+
@a.media_url == "http://twitpic.com/show/large/17d7th"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should have a media thumbnail" do
|
40
|
+
@a.media_thumbnail == "http://twitpic.com/show/thumb/17d7th"
|
41
|
+
end
|
42
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: muri
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Schneider
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-03-
|
12
|
+
date: 2010-03-09 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -33,6 +33,7 @@ files:
|
|
33
33
|
- lib/muri/filters/flickr.rb
|
34
34
|
- lib/muri/filters/imageshack.rb
|
35
35
|
- lib/muri/filters/photobucket.rb
|
36
|
+
- lib/muri/filters/twitpic.rb
|
36
37
|
- lib/muri/filters/vimeo.rb
|
37
38
|
- lib/muri/filters/youtube.rb
|
38
39
|
- muri.gemspec
|
@@ -41,6 +42,7 @@ files:
|
|
41
42
|
- test/flickr_test.rb
|
42
43
|
- test/imageshack_test.rb
|
43
44
|
- test/photobucket_test.rb
|
45
|
+
- test/twitpic_test.rb
|
44
46
|
- test/vimeo_test.rb
|
45
47
|
- test/youtube_test.rb
|
46
48
|
has_rdoc: true
|
@@ -77,5 +79,6 @@ test_files:
|
|
77
79
|
- test/flickr_test.rb
|
78
80
|
- test/imageshack_test.rb
|
79
81
|
- test/photobucket_test.rb
|
82
|
+
- test/twitpic_test.rb
|
80
83
|
- test/vimeo_test.rb
|
81
84
|
- test/youtube_test.rb
|