Class: GoogleFeedRequest

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
app/models/google_feed_request.rb

Overview

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(api_key_id = nil) ⇒ GoogleFeedRequest

Initialize Google Request. Parameters: api_key_id: Valid Google access key (optional)



14
15
16
# File 'app/models/google_feed_request.rb', line 14

def initialize(api_key_id = nil)
  @api_key_id = api_key_id
end

Class Method Details

.build_google_query(query_options) ⇒ Object

Add standard items to the google query



104
105
106
107
108
# File 'app/models/google_feed_request.rb', line 104

def self.build_google_query(query_options)
  query_options[:v] = '1.0'
  query_options[:key] = GlobalConfig.google_ajax_api_key if GlobalConfig.google_ajax_api_key
  query_options
end

.convert_google_feed_json_to_entries(feed, json) ⇒ Object

Converts json returned from google into an array of entries



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'app/models/google_feed_request.rb', line 58

def self.convert_google_feed_json_to_entries(feed, json)
  if json['responseData']['feed']['entries']
    json['responseData']['feed']['entries'].collect do |entry|
      published_at = DateTime.parse(entry['publishedDate']) rescue DateTime.now - 1.day
      Entry.new(:permalink => entry['link'],
                :author => entry['author'],
                :title => entry['title'],
                :description => entry['contentSnippet'],
                :content => entry['content'],
                :published_at => published_at,
                :tag_list => entry['categories'],
                :direct_link => entry['link'],
                :feed => feed)
    end
  end
end

.convert_google_feed_json_to_feed(feed, json) ⇒ Object

Converts json returned from google into a feed object



45
46
47
48
49
50
51
52
53
54
55
# File 'app/models/google_feed_request.rb', line 45

def self.convert_google_feed_json_to_feed(feed, json)
  if json['responseStatus'] == 200
    if json['responseData']['feed']
      Feed.new( :uri => feed.uri,
                :service_id => feed.service_id,
                :display_uri => json['responseData']['feed']['link'],
                :title => json['responseData']['feed']['title'],
                :service => feed.service)
    end
  end
end

.convert_google_find_feeds_json_to_feeds(google_feeds) ⇒ Object

convert the result of a google query to ‘Feed’ objects



94
95
96
97
98
99
100
101
# File 'app/models/google_feed_request.rb', line 94

def self.convert_google_find_feeds_json_to_feeds(google_feeds)
  google_feeds['responseData']['entries'].collect do |google_feed|
    Feed.new( :uri => google_feed['url'],
              :display_uri => google_feed['link'],
              :title => google_feed['title'],
              :service_id => Service.find_service_by_uri(google_feed['link']).id)
  end
end

.find_feeds(query) ⇒ Object

Search for feeds using google. This will return a collection of ‘Feed’ objects



77
78
79
80
81
82
83
84
85
# File 'app/models/google_feed_request.rb', line 77

def self.find_feeds(query)
  query = query.join('+') if query.is_a?(Array)
  feed_response = find_google_feeds(query)
  if 200 == feed_response['responseStatus']
    convert_google_find_feeds_json_to_feeds(feed_response)
  else
    []
  end
end

.find_google_feeds(query) ⇒ Object

Search for feeds using google. This will return a hash with the results



89
90
91
# File 'app/models/google_feed_request.rb', line 89

def self.find_google_feeds(query)
  get('http://ajax.googleapis.com/ajax/services/feed/find', :query => build_google_query({:q => query}))
end

.load_feed(uri) ⇒ Object

Requests entries for a single feed



23
24
25
# File 'app/models/google_feed_request.rb', line 23

def self.load_feed(uri)
  get('http://ajax.googleapis.com/ajax/services/feed/load', :query => build_google_query({:q => uri}))
end

.load_feeds(feeds) ⇒ Object

Requests a set of feeds from Google

feeds: An array of objects with the attributes ‘uri’ and ‘service_id’ defined



30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'app/models/google_feed_request.rb', line 30

def self.load_feeds(feeds)
  feeds = feeds.collect do |feed|
    json = load_feed(feed.uri)
    new_feed = convert_google_feed_json_to_feed(feed, json)
    new_feed.entries << convert_google_feed_json_to_entries(new_feed, json).compact if new_feed
    new_feed
  end
  if feeds
    feeds.compact!
  else
    []
  end
end

.lookup_feed(uri) ⇒ Object



18
19
20
# File 'app/models/google_feed_request.rb', line 18

def self.lookup_feed(uri)
  get('http://ajax.googleapis.com/ajax/services/feed/lookup', :query => build_google_query({:q => uri}))
end