google-search 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/History.rdoc +8 -0
  2. data/Manifest +70 -0
  3. data/README.rdoc +95 -0
  4. data/Rakefile +16 -0
  5. data/examples/image.rb +21 -0
  6. data/examples/images.html +1 -0
  7. data/examples/web.rb +28 -0
  8. data/google-search.gemspec +33 -0
  9. data/lib/google-search.rb +29 -0
  10. data/lib/google-search/item.rb +10 -0
  11. data/lib/google-search/item/base.rb +78 -0
  12. data/lib/google-search/item/blog.rb +34 -0
  13. data/lib/google-search/item/book.rb +40 -0
  14. data/lib/google-search/item/image.rb +40 -0
  15. data/lib/google-search/item/local.rb +107 -0
  16. data/lib/google-search/item/news.rb +46 -0
  17. data/lib/google-search/item/patent.rb +40 -0
  18. data/lib/google-search/item/video.rb +46 -0
  19. data/lib/google-search/item/web.rb +22 -0
  20. data/lib/google-search/response.rb +92 -0
  21. data/lib/google-search/search.rb +11 -0
  22. data/lib/google-search/search/base.rb +212 -0
  23. data/lib/google-search/search/blog.rb +14 -0
  24. data/lib/google-search/search/book.rb +8 -0
  25. data/lib/google-search/search/image.rb +93 -0
  26. data/lib/google-search/search/local.rb +8 -0
  27. data/lib/google-search/search/mixins.rb +4 -0
  28. data/lib/google-search/search/mixins/filter.rb +26 -0
  29. data/lib/google-search/search/mixins/order_by.rb +36 -0
  30. data/lib/google-search/search/mixins/safety_level.rb +40 -0
  31. data/lib/google-search/search/news.rb +66 -0
  32. data/lib/google-search/search/patent.rb +37 -0
  33. data/lib/google-search/search/video.rb +15 -0
  34. data/lib/google-search/search/web.rb +15 -0
  35. data/lib/google-search/version.rb +6 -0
  36. data/spec/fixtures/400-response.json +1 -0
  37. data/spec/fixtures/blog-response.json +1 -0
  38. data/spec/fixtures/book-response.json +1 -0
  39. data/spec/fixtures/image-response.json +1 -0
  40. data/spec/fixtures/invalid-response.json +1 -0
  41. data/spec/fixtures/local-response.json +1 -0
  42. data/spec/fixtures/news-response.json +1 -0
  43. data/spec/fixtures/patent-response.json +1 -0
  44. data/spec/fixtures/video-response.json +1 -0
  45. data/spec/fixtures/web-2-response.json +1 -0
  46. data/spec/fixtures/web-response.json +1 -0
  47. data/spec/item_blog_spec.rb +26 -0
  48. data/spec/item_book_spec.rb +18 -0
  49. data/spec/item_image_spec.rb +21 -0
  50. data/spec/item_local_spec.rb +30 -0
  51. data/spec/item_news_spec.rb +19 -0
  52. data/spec/item_patent_spec.rb +19 -0
  53. data/spec/item_spec.rb +10 -0
  54. data/spec/item_video_spec.rb +20 -0
  55. data/spec/item_web_spec.rb +18 -0
  56. data/spec/response_spec.rb +63 -0
  57. data/spec/search_blog_spec.rb +0 -0
  58. data/spec/search_book_spec.rb +0 -0
  59. data/spec/search_image_spec.rb +71 -0
  60. data/spec/search_local_spec.rb +0 -0
  61. data/spec/search_news_spec.rb +33 -0
  62. data/spec/search_patent_spec.rb +27 -0
  63. data/spec/search_spec.rb +89 -0
  64. data/spec/search_video_spec.rb +42 -0
  65. data/spec/search_web_spec.rb +42 -0
  66. data/spec/spec.opts +2 -0
  67. data/spec/spec_helper.rb +13 -0
  68. data/tasks/docs.rake +18 -0
  69. data/tasks/gemspec.rake +3 -0
  70. data/tasks/spec.rake +25 -0
  71. metadata +168 -0
@@ -0,0 +1,8 @@
1
+
2
+ === 1.0.2 / 2009-07-27
3
+
4
+ * Defaulting Item#uri to unescapedUrl
5
+
6
+ === 1.0.0 / 2009-07-24
7
+
8
+ * Initial release
@@ -0,0 +1,70 @@
1
+ examples/image.rb
2
+ examples/images.html
3
+ examples/web.rb
4
+ google-search.gemspec
5
+ History.rdoc
6
+ lib/google-search/item/base.rb
7
+ lib/google-search/item/blog.rb
8
+ lib/google-search/item/book.rb
9
+ lib/google-search/item/image.rb
10
+ lib/google-search/item/local.rb
11
+ lib/google-search/item/news.rb
12
+ lib/google-search/item/patent.rb
13
+ lib/google-search/item/video.rb
14
+ lib/google-search/item/web.rb
15
+ lib/google-search/item.rb
16
+ lib/google-search/response.rb
17
+ lib/google-search/search/base.rb
18
+ lib/google-search/search/blog.rb
19
+ lib/google-search/search/book.rb
20
+ lib/google-search/search/image.rb
21
+ lib/google-search/search/local.rb
22
+ lib/google-search/search/mixins/filter.rb
23
+ lib/google-search/search/mixins/order_by.rb
24
+ lib/google-search/search/mixins/safety_level.rb
25
+ lib/google-search/search/mixins.rb
26
+ lib/google-search/search/news.rb
27
+ lib/google-search/search/patent.rb
28
+ lib/google-search/search/video.rb
29
+ lib/google-search/search/web.rb
30
+ lib/google-search/search.rb
31
+ lib/google-search/version.rb
32
+ lib/google-search.rb
33
+ Manifest
34
+ Rakefile
35
+ README.rdoc
36
+ spec/fixtures/400-response.json
37
+ spec/fixtures/blog-response.json
38
+ spec/fixtures/book-response.json
39
+ spec/fixtures/image-response.json
40
+ spec/fixtures/invalid-response.json
41
+ spec/fixtures/local-response.json
42
+ spec/fixtures/news-response.json
43
+ spec/fixtures/patent-response.json
44
+ spec/fixtures/video-response.json
45
+ spec/fixtures/web-2-response.json
46
+ spec/fixtures/web-response.json
47
+ spec/item_blog_spec.rb
48
+ spec/item_book_spec.rb
49
+ spec/item_image_spec.rb
50
+ spec/item_local_spec.rb
51
+ spec/item_news_spec.rb
52
+ spec/item_patent_spec.rb
53
+ spec/item_spec.rb
54
+ spec/item_video_spec.rb
55
+ spec/item_web_spec.rb
56
+ spec/response_spec.rb
57
+ spec/search_blog_spec.rb
58
+ spec/search_book_spec.rb
59
+ spec/search_image_spec.rb
60
+ spec/search_local_spec.rb
61
+ spec/search_news_spec.rb
62
+ spec/search_patent_spec.rb
63
+ spec/search_spec.rb
64
+ spec/search_video_spec.rb
65
+ spec/search_web_spec.rb
66
+ spec/spec.opts
67
+ spec/spec_helper.rb
68
+ tasks/docs.rake
69
+ tasks/gemspec.rake
70
+ tasks/spec.rake
@@ -0,0 +1,95 @@
1
+
2
+ = Google Search
3
+
4
+ Fast, feature rich Google Search client. Search web results, images,
5
+ books, local, patents, blogs and news using an elegant Ruby API with
6
+ only a single dependency.
7
+
8
+ == Dependencies
9
+
10
+ * json gem
11
+
12
+ == Features
13
+
14
+ * Fast
15
+ * Lazy Enumeration (requests more results from google, not all at once)
16
+ * Populates Google::Search::Item's blog, book, image, local, news, patent, video, and web
17
+ * Clean, well documented source code
18
+ * Full test coverage
19
+
20
+ == Classes
21
+
22
+ - Google::Search | superclass of all other search classes. Is Enumerable
23
+ - Google::Search::Web | web search.
24
+ - Google::Search::Blog | blog search.
25
+ - Google::Search::Book | book search.
26
+ - Google::Search::Image | image search.
27
+ - Google::Search::Local | local search.
28
+ - Google::Search::News | news search.
29
+ - Google::Search::Patent | patent search.
30
+ - Google::Search::Video | video search.
31
+ - Google::Search::Response | single request response, containing items. Is Enumerable
32
+ - Google::Search::Item | single item, superclass of all other items.
33
+ - Google::Search::Item::Web | single item containing web specific data.
34
+ - Google::Search::Item::Blog | single item containing blog specific data.
35
+ - Google::Search::Item::Book | single item containing book specific data.
36
+ - Google::Search::Item::Image | single item containing image specific data.
37
+ - Google::Search::Item::Local | single item containing local specific data.
38
+ - Google::Search::Item::News | single item containing news specific data.
39
+ - Google::Search::Item::Patent | single item containing patent specific data.
40
+ - Google::Search::Item::Video | single item containing video specific data.
41
+
42
+ == Arbitrary Query String Support
43
+
44
+ Arbitrary key / value pairs may be passed to Google::Search.new, all options
45
+ passed that are not assigned (deleted) will pass on to be part of the query string.
46
+
47
+ For argument reference visit: http://code.google.com/apis/ajaxsearch/documentation/reference.html#_fonje_web
48
+
49
+ == Items
50
+
51
+ Each item type (web, image, etc) is a subclass of Google::Search::Item,
52
+ whose constant is Google::Search::Item::{Web, Image, Blog, etc}. Every aspect
53
+ of google-search is well documented, so poke around to learn more or view
54
+ spec/item_spec.rb for item attributes.
55
+
56
+ == Image example
57
+
58
+ Below we simply create a new :image search, and pass a :query string.
59
+ Query strings are urlencoded when Search#get_uri is called, so there
60
+ is no reason to do so manually.
61
+
62
+ File.open('path/to/images.html', 'w+') do |file|
63
+ Google::Search::Image.new(:query => 'Cookies').each do |image|
64
+ file.write %(<img src="#{image.uri}">)
65
+ end
66
+ end
67
+
68
+ == More Information
69
+
70
+ * View the source :)
71
+
72
+ == License:
73
+
74
+ (The MIT License)
75
+
76
+ Copyright (c) 2009 TJ Holowaychuk <tj@vision-media.ca>
77
+
78
+ Permission is hereby granted, free of charge, to any person obtaining
79
+ a copy of this software and associated documentation files (the
80
+ 'Software'), to deal in the Software without restriction, including
81
+ without limitation the rights to use, copy, modify, merge, publish,
82
+ distribute, sublicense, an d/or sell copies of the Software, and to
83
+ permit persons to whom the Software is furnished to do so, subject to
84
+ the following conditions:
85
+
86
+ The above copyright notice and this permission notice shall be
87
+ included in all copies or substantial portions of the Software.
88
+
89
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
90
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
91
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
92
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
93
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
94
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
95
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,16 @@
1
+
2
+ $:.unshift 'lib'
3
+ require 'google-search'
4
+ require 'rubygems'
5
+ require 'rake'
6
+ require 'echoe'
7
+
8
+ Echoe.new "google-search", Google::Search::VERSION do |p|
9
+ p.author = "TJ Holowaychuk"
10
+ p.email = "tj@vision-media.ca"
11
+ p.summary = "Google Search API"
12
+ p.url = "http://github.com/visionmedia/google-search"
13
+ p.runtime_dependencies << 'json'
14
+ end
15
+
16
+ Dir['tasks/**/*.rake'].sort.each { |f| load f }
@@ -0,0 +1,21 @@
1
+
2
+ $:.unshift File.dirname(__FILE__) + '/../lib'
3
+ require 'rubygems'
4
+ require 'google-search'
5
+ require 'rext/all'
6
+
7
+ HTML = File.dirname(__FILE__) + '/images.html'
8
+
9
+ File.open(HTML, 'w+') do |file|
10
+ Google::Search::Image.new(:query => 'Cookies', :image_size => :icon).each do |image|
11
+ file.write %(<img src="#{image.uri}">)
12
+ end
13
+ end
14
+
15
+ begin
16
+ `open -a Safari #{HTML}`
17
+ rescue
18
+ puts "Not on OSX? wtf? open #{HTML} in your browser to view the images"
19
+ end
20
+
21
+
@@ -0,0 +1 @@
1
+ <img src="http://i222.photobucket.com/albums/dd203/I_never_said_I_lie_and_wait_4ever/lmao.gif"><img src="http://www.kde-look.org/CONTENT/user-pics/0/cookies.gif"><img src="http://games2flash.net/files/image/cookiesJS1.gif"><img src="http://www.learnairbrush.com/forums/images/commerce/items/cookies-48x48.png"><img src="http://www.bigmoneyarcade.com/games/images/cooking-cookies-game.gif"><img src="http://icons.iconarchive.com/icons/fasticon/coffee-break/cookies-icon.jpg"><img src="http://i257.photobucket.com/albums/hh236/h3llokitty2/ICONATOR_1e3e3e686ed961a0b9009d3c3e.gif"><img src="http://farm4.static.flickr.com/3069/buddyicons/29481597%40N08.jpg"><img src="http://1.gravatar.com/avatar/1df546cd37482d661c0a10d36ad83af5%3Fs%3D48%26d%3Didenticon%26r%3DG"><img src="http://www.arcadeonline.com/games/other/cooking-cookies/cooking1.gif"><img src="http://blueberry.ipaula.com/affiliates/cookies.gif"><img src="http://farm1.static.flickr.com/73/buddyicons/26768826%40N00.jpg"><img src="http://www.adiumxtras.com/images/thumbs/cookies_7_3204_2847_thumb.png"><img src="http://www.educationcanada.com/images/cookies.gif"><img src="http://z.hubpages.com/u/10745_50.jpg"><img src="http://www.wowcoolstuff.com/v/vspfiles/photos/Fortune-cookies-0.jpg"><img src="http://z.hubpages.com/u/11745_50.jpg"><img src="http://profile.ak.facebook.com/object2/609/0/q8611607717_7269.jpg"><img src="http://images.allrecipes.com/site/allrecipes/holidays/easter09/cutest_cookies.jpg"><img src="http://www.pendletonsoccer.org/pysa/modules/Your_Account/images/warning.gif"><img src="http://ocanada.com.au/shop/media/catalog/product/cache/1/thumbnail/50x/5e06319eda06f020e43594a9c230972d/O/h/OhHenryCookies218g_Lge.gif"><img src="http://farm4.static.flickr.com/3044/buddyicons/31781247%40N03.jpg"><img src="http://home.nordnet.fr/~pmdevigne/Images/CookiesManager/cm48x48.gif"><img src="http://www.epicurious.com/images/articlesguides/howtocook/dishes/cookies_46.jpg"><img src="http://musicremedy.com/webfiles/artists/CasperandtheCookies/CasperandtheCookies-06-small.jpg"><img src="http://www.monkeydoit.com/content_images/icon-cookies.gif"><img src="http://img.alibaba.com/photo/233843288/Pastry_Homemade_Cookies_Mixed_12_OZ.summ.jpg"><img src="http://www.somethingmorestore.com/Images/BeanPod/OatMlCkies.jpg"><img src="http://z.hubpages.com/u/94731_50.jpg"><img src="http://images.meredith.com/bhg/images/ecards/50sq_ecardCmasCookies100176327.jpg"><img src="http://filesll.fluxstatic.com/FFFFD99501A67167000295D9FFFF/TN1/Jpg/B-9835/AR50x50,Crop/633696919200000000"><img src="http://farm2.static.flickr.com/1155/buddyicons/8292289%40N08.jpg"><img src="http://ocanada.com.au/shop/media/catalog/product/cache/1/thumbnail/50x/5e06319eda06f020e43594a9c230972d/M/a/Maplecream_Cookies.jpg"><img src="http://www.traderscity.com/board/userpixthumbs6/5280-entertainment-fortune-cookies-1.jpg"><img src="http://www.traderscity.com/board/userpixthumbs6/5280-birthday-fortune-cookies-1.jpg"><img src="http://www.avonandsomerset.police.uk/community_safety/internet_advice/images/cookies_pli.jpg"><img src="http://www.source-promotional-products.co.uk/images/adv_50.gif"><img src="http://img.afullcup.com/assets/images/coupondb/chips-cookies-crackers.png"><img src="http://www.calebseyes.com/_wizardimages/Cookies.gif"><img src="http://ecx.images-amazon.com/images/I/51RZQE-D1pL._SL75_PIsitb-sticker-arrow-st,TopRight,8,-14_OU02_SS50_.jpg"><img src="http://ecx.images-amazon.com/images/I/51OehUjVyuL._SL75_PIsitb-sticker-arrow-st,TopRight,8,-14_OU01_SS50_.jpg"><img src="http://farm1.static.flickr.com/139/buddyicons/23514648%40N00.jpg"><img src="http://ocanada.com.au/shop/media/catalog/product/cache/1/thumbnail/50x/5e06319eda06f020e43594a9c230972d/R/e/ReeseCookies198g_Lge.gif"><img src="http://www.madame-chocolat.com/media/catalog/product/cache/1/thumbnail/50x/5e06319eda06f020e43594a9c230972d/c/h/chocolate_chip_cookies.jpg"><img src="http://www.traderscity.com/board/userpixthumbs6/5280-love-fortune-cookies-1.jpg"><img src="http://popcdn.zoovy.lg1.simplecdn.net/img/orangeonions/W50-H50-Bffffff/C/chocolate_chip_cookies.jpg"><img src="http://my.opera.com/community/users/avatar.pl/1587122"><img src="http://www.snackordie.com/2008/12/22/ffblackmagecookieicon.jpg"><img src="http://www.snackordie.com/2009/02/02/bubblebobblecookieicon.jpg"><img src="http://my.opera.com/community/users/avatar.pl/1492038"><img src="http://ecx.images-amazon.com/images/I/51zObsVkTSL._SL75_PIsitb-sticker-arrow-st,TopRight,8,-14_OU02_SS50_.jpg"><img src="http://farm1.static.flickr.com/52/buddyicons/88876166%40N00.jpg"><img src="http://www.peanutfreeplanet.com/v/vspfiles/photos/HomeFreeOatmealCookies-0.gif"><img src="http://www.instructables.com/files/deriv/F9P/HL0V/C8LEWH1IWZM/F9PHL0VC8LEWH1IWZM.TINY.jpg"><img src="http://www.peanutfreeplanet.com/v/vspfiles/photos/HomeFreeOrganicCChipCookies-0.gif"><img src="http://img.amazon.ca/images/I/51LKzjFp7WL._SL75_PIsitb-sticker-arrow-st,TopRight,8,-14_OU15_SS50_.jpg"><img src="http://cdn.cloudfiles.mosso.com/c28492/321251-1243940713.gif"><img src="http://www.iconarchive.com/icons/fasticon/coffee-break/cookies-48x48.png"><img src="http://brh.numbera.com/experiments/images/icons/pixel-cookies-48.jpg"><img src="http://www.rjjulia.com/media/catalog/product/cache/1/thumbnail//50x/c/o/cookies.jpg"><img src="http://www.kevinmccaughey.com/wp-content/uploads/fortune-cookie.jpg"><img src="http://farm1.static.flickr.com/232/buddyicons/8207661%40N06.jpg"><img src="http://www.softlist.net/images/icons/expired_cookies_cleaner_network___internet_browser_tools-8179.gif"><img src="http://forums.superantispyware.com/download/file.php%3Favatar%3D3913_1235515286.jpg">
@@ -0,0 +1,28 @@
1
+
2
+ $:.unshift File.dirname(__FILE__) + '/../lib'
3
+ require 'rubygems'
4
+ require 'google-search'
5
+
6
+ def find_item uri, query
7
+ search = Google::Search::Web.new do |search|
8
+ search.query = query
9
+ search.size = :large
10
+ search.each_response { print '.'; $stdout.flush }
11
+ end
12
+ search.find { |item| item.uri =~ uri }
13
+ end
14
+
15
+ def rank_for query
16
+ print "%35s " % query
17
+ if item = find_item(/vision\-media\.ca/, query)
18
+ puts " #%d" % (item.index + 1)
19
+ else
20
+ puts " Not found"
21
+ end
22
+ end
23
+
24
+ rank_for 'Victoria Web Training'
25
+ rank_for 'Victoria Web School'
26
+ rank_for 'Victoria Web Design'
27
+ rank_for 'Victoria Drupal'
28
+ rank_for 'Victoria Drupal Development'
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{google-search}
5
+ s.version = "1.0.2"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["TJ Holowaychuk"]
9
+ s.date = %q{2009-07-30}
10
+ s.description = %q{Google Search API}
11
+ s.email = %q{tj@vision-media.ca}
12
+ s.extra_rdoc_files = ["lib/google-search/item/base.rb", "lib/google-search/item/blog.rb", "lib/google-search/item/book.rb", "lib/google-search/item/image.rb", "lib/google-search/item/local.rb", "lib/google-search/item/news.rb", "lib/google-search/item/patent.rb", "lib/google-search/item/video.rb", "lib/google-search/item/web.rb", "lib/google-search/item.rb", "lib/google-search/response.rb", "lib/google-search/search/base.rb", "lib/google-search/search/blog.rb", "lib/google-search/search/book.rb", "lib/google-search/search/image.rb", "lib/google-search/search/local.rb", "lib/google-search/search/mixins/filter.rb", "lib/google-search/search/mixins/order_by.rb", "lib/google-search/search/mixins/safety_level.rb", "lib/google-search/search/mixins.rb", "lib/google-search/search/news.rb", "lib/google-search/search/patent.rb", "lib/google-search/search/video.rb", "lib/google-search/search/web.rb", "lib/google-search/search.rb", "lib/google-search/version.rb", "lib/google-search.rb", "README.rdoc", "tasks/docs.rake", "tasks/gemspec.rake", "tasks/spec.rake"]
13
+ s.files = ["examples/image.rb", "examples/images.html", "examples/web.rb", "google-search.gemspec", "History.rdoc", "lib/google-search/item/base.rb", "lib/google-search/item/blog.rb", "lib/google-search/item/book.rb", "lib/google-search/item/image.rb", "lib/google-search/item/local.rb", "lib/google-search/item/news.rb", "lib/google-search/item/patent.rb", "lib/google-search/item/video.rb", "lib/google-search/item/web.rb", "lib/google-search/item.rb", "lib/google-search/response.rb", "lib/google-search/search/base.rb", "lib/google-search/search/blog.rb", "lib/google-search/search/book.rb", "lib/google-search/search/image.rb", "lib/google-search/search/local.rb", "lib/google-search/search/mixins/filter.rb", "lib/google-search/search/mixins/order_by.rb", "lib/google-search/search/mixins/safety_level.rb", "lib/google-search/search/mixins.rb", "lib/google-search/search/news.rb", "lib/google-search/search/patent.rb", "lib/google-search/search/video.rb", "lib/google-search/search/web.rb", "lib/google-search/search.rb", "lib/google-search/version.rb", "lib/google-search.rb", "Manifest", "Rakefile", "README.rdoc", "spec/fixtures/400-response.json", "spec/fixtures/blog-response.json", "spec/fixtures/book-response.json", "spec/fixtures/image-response.json", "spec/fixtures/invalid-response.json", "spec/fixtures/local-response.json", "spec/fixtures/news-response.json", "spec/fixtures/patent-response.json", "spec/fixtures/video-response.json", "spec/fixtures/web-2-response.json", "spec/fixtures/web-response.json", "spec/item_blog_spec.rb", "spec/item_book_spec.rb", "spec/item_image_spec.rb", "spec/item_local_spec.rb", "spec/item_news_spec.rb", "spec/item_patent_spec.rb", "spec/item_spec.rb", "spec/item_video_spec.rb", "spec/item_web_spec.rb", "spec/response_spec.rb", "spec/search_blog_spec.rb", "spec/search_book_spec.rb", "spec/search_image_spec.rb", "spec/search_local_spec.rb", "spec/search_news_spec.rb", "spec/search_patent_spec.rb", "spec/search_spec.rb", "spec/search_video_spec.rb", "spec/search_web_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/docs.rake", "tasks/gemspec.rake", "tasks/spec.rake"]
14
+ s.homepage = %q{http://github.com/visionmedia/google-search}
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Google-search", "--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{google-search}
18
+ s.rubygems_version = %q{1.3.5}
19
+ s.summary = %q{Google Search API}
20
+
21
+ if s.respond_to? :specification_version then
22
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
+ s.specification_version = 3
24
+
25
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
26
+ s.add_runtime_dependency(%q<json>, [">= 0"])
27
+ else
28
+ s.add_dependency(%q<json>, [">= 0"])
29
+ end
30
+ else
31
+ s.add_dependency(%q<json>, [">= 0"])
32
+ end
33
+ end
@@ -0,0 +1,29 @@
1
+ #--
2
+ # Copyright (c) 2009 2009 TJ Holowaychuk <tj@vision-media.ca>
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining
5
+ # a copy of this software and associated documentation files (the
6
+ # "Software"), to deal in the Software without restriction, including
7
+ # without limitation the rights to use, copy, modify, merge, publish,
8
+ # distribute, sublicense, and/or sell copies of the Software, and to
9
+ # permit persons to whom the Software is furnished to do so, subject to
10
+ # the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be
13
+ # included in all copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ #++
23
+
24
+ require 'json'
25
+ require 'open-uri'
26
+ require 'google-search/version'
27
+ require 'google-search/item'
28
+ require 'google-search/response'
29
+ require 'google-search/search'
@@ -0,0 +1,10 @@
1
+
2
+ require 'google-search/item/base'
3
+ require 'google-search/item/web'
4
+ require 'google-search/item/blog'
5
+ require 'google-search/item/book'
6
+ require 'google-search/item/image'
7
+ require 'google-search/item/local'
8
+ require 'google-search/item/news'
9
+ require 'google-search/item/video'
10
+ require 'google-search/item/patent'
@@ -0,0 +1,78 @@
1
+
2
+ module Google
3
+ class Search
4
+ class Item
5
+
6
+ ##
7
+ # Index.
8
+
9
+ attr_reader :index
10
+
11
+ ##
12
+ # Unformatted page title.
13
+
14
+ attr_reader :title
15
+
16
+ ##
17
+ # Absolute uri.
18
+
19
+ attr_reader :uri
20
+
21
+ ##
22
+ # Visible uri.
23
+
24
+ attr_reader :visible_uri
25
+
26
+ ##
27
+ # Thumbnail uri.
28
+
29
+ attr_reader :thumbnail_uri
30
+
31
+ ##
32
+ # Thumbnail width in pixels.
33
+
34
+ attr_reader :thumbnail_width
35
+
36
+ ##
37
+ # Thumbnail height in pixels.
38
+
39
+ attr_reader :thumbnail_height
40
+
41
+ ##
42
+ # Contents.
43
+
44
+ attr_reader :content
45
+
46
+ ##
47
+ # Initialize with _hash_.
48
+
49
+ def initialize hash
50
+ @index = hash['index']
51
+ @title = hash['titleNoFormatting'] || hash['title']
52
+ @uri = hash['unescapedUrl'] || hash['url'] || hash['postUrl']
53
+ @content = hash['contentNoFormatting'] || hash['content']
54
+ @thumbnail_uri = hash['tbUrl']
55
+ @thumbnail_width = hash['tbWidth'].to_i
56
+ @thumbnail_height = hash['tbHeight'].to_i
57
+ @visible_uri = hash['visibleUrl']
58
+ end
59
+
60
+ ##
61
+ # Return class for _google_class_ string formatted
62
+ # as 'GwebSearch', 'GbookSearch', etc.
63
+
64
+ def self.class_for google_class
65
+ case google_class
66
+ when 'GwebSearch' ; Web
67
+ when 'GlocalSearch' ; Local
68
+ when 'GbookSearch' ; Book
69
+ when 'GimageSearch' ; Image
70
+ when 'GvideoSearch' ; Video
71
+ when 'GpatentSearch' ; Patent
72
+ when 'GnewsSearch' ; News
73
+ when 'GblogSearch' ; Blog
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,34 @@
1
+
2
+ module Google
3
+ class Search
4
+ class Item
5
+ class Blog < self
6
+
7
+ ##
8
+ # Blog base uri.
9
+
10
+ attr_reader :blog_uri
11
+
12
+ ##
13
+ # Author name.
14
+
15
+ attr_reader :author
16
+
17
+ ##
18
+ # Published DateTime.
19
+
20
+ attr_reader :published
21
+
22
+ ##
23
+ # Initialize with _hash_.
24
+
25
+ def initialize hash
26
+ super
27
+ @author = hash['author']
28
+ @blog_uri = hash['blogUrl']
29
+ @published = DateTime.parse hash['publishedDate']
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,40 @@
1
+
2
+ module Google
3
+ class Search
4
+ class Item
5
+ class Book < self
6
+
7
+ ##
8
+ # Book id.
9
+
10
+ attr_reader :id
11
+
12
+ ##
13
+ # Author name(s).
14
+
15
+ attr_reader :author
16
+
17
+ ##
18
+ # Published year.
19
+
20
+ attr_reader :published_year
21
+
22
+ ##
23
+ # Page count.
24
+
25
+ attr_reader :pages
26
+
27
+ ##
28
+ # Initialize with _hash_.
29
+
30
+ def initialize hash
31
+ super
32
+ @author = hash['authors']
33
+ @published_year = hash['publishedYear'].to_i
34
+ @id = hash['bookId']
35
+ @pages = hash['pageCount'].to_i
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end