Renamed module name to google_search (custom_search)
Clean code. Updated google custom search to handle quota limit and no query submit. Updated encoding issues for input searches: like "void safe" and "void + safe".
This commit is contained in:
@@ -19,17 +19,17 @@ feature {NONE} -- Initialization
|
||||
make (a_query_parameters: GCSE_QUERY_PARAMETERS)
|
||||
-- Create an object GCSE with query_parameters `a_query_parameters'
|
||||
do
|
||||
query_paremeter := a_query_parameters
|
||||
query_parameter := a_query_parameters
|
||||
ensure
|
||||
query_parameters_set: query_paremeter = a_query_parameters
|
||||
query_parameters_set: query_parameter = a_query_parameters
|
||||
end
|
||||
|
||||
feature -- Access
|
||||
|
||||
base_uri: STRING_8 = "https://www.googleapis.com/customsearch/v1"
|
||||
-- Google custom search base URI
|
||||
-- Google custom search base URI.
|
||||
|
||||
query_paremeter: GCSE_QUERY_PARAMETERS
|
||||
query_parameter: GCSE_QUERY_PARAMETERS
|
||||
-- Google custom search parameters.
|
||||
|
||||
last_result: detachable GCSE_RESPONSE
|
||||
@@ -38,7 +38,7 @@ feature -- Access
|
||||
feature -- Status Reports
|
||||
|
||||
errors: detachable LIST [READABLE_STRING_8]
|
||||
-- optional table of error codes
|
||||
-- optional list of error messages.
|
||||
|
||||
feature -- API
|
||||
|
||||
@@ -53,12 +53,15 @@ feature -- API
|
||||
-- but it's possible to define atom response using the alt parameter.
|
||||
last_result := Void
|
||||
if attached get as l_response then
|
||||
create l_gcse_response
|
||||
l_gcse_response.set_status (l_response.status)
|
||||
l_gcse_response.set_status_nessage (l_response.status_message)
|
||||
|
||||
if attached l_response.body as l_body then
|
||||
create l_parser.make_with_string (l_body)
|
||||
l_parser.parse_content
|
||||
if l_parser.is_parsed and then attached {JSON_OBJECT} l_parser.parsed_json_object as jv then
|
||||
if l_response.status = 200 and then l_parser.is_parsed and then attached {JSON_OBJECT} l_parser.parsed_json_object as jv then
|
||||
-- Queries
|
||||
create l_gcse_response
|
||||
if attached {JSON_OBJECT} jv.item (queries_key) as jqueries then
|
||||
-- Next Page
|
||||
if attached {GCSE_PAGE} query_page (next_page_key, jqueries) as l_page then
|
||||
@@ -80,7 +83,8 @@ feature -- API
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
else
|
||||
put_error (l_body)
|
||||
end
|
||||
else
|
||||
put_error (l_response.status.out)
|
||||
@@ -107,7 +111,7 @@ feature {NONE} -- Implementation
|
||||
new_uri: STRING_8
|
||||
-- new uri (BaseUri?key=secret_value&cx=a_cx_id&q=a_query
|
||||
-- ?key=INSERT_YOUR_API_KEY&cx=017576662512468239146:omuauf_lfve&q=lectures
|
||||
-- full teamplte BaseUri?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&
|
||||
-- full template BaseUri?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&
|
||||
-- safe={safe?}&cx={cx?}&cref={cref?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&
|
||||
-- googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&
|
||||
-- siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&
|
||||
@@ -118,24 +122,24 @@ feature {NONE} -- Implementation
|
||||
do
|
||||
create Result.make_from_string (base_uri)
|
||||
Result.append ("?key=")
|
||||
Result.append (query_paremeter.secret)
|
||||
Result.append (query_parameter.secret)
|
||||
Result.append ("&cx=")
|
||||
Result.append (query_paremeter.cx)
|
||||
Result.append (query_parameter.cx)
|
||||
Result.append ("&q=")
|
||||
Result.append (query_paremeter.query)
|
||||
Result.append (query_parameter.query)
|
||||
-- num
|
||||
if attached query_paremeter.num as l_num then
|
||||
if attached query_parameter.num as l_num then
|
||||
Result.append ("&num=")
|
||||
Result.append (l_num)
|
||||
end
|
||||
if attached query_paremeter.start as l_start then
|
||||
if attached query_parameter.start as l_start then
|
||||
Result.append ("&start=")
|
||||
Result.append (l_start)
|
||||
end
|
||||
end
|
||||
|
||||
put_error (a_code: READABLE_STRING_GENERAL)
|
||||
-- put error with code `a_code'.
|
||||
put_error (a_message: READABLE_STRING_GENERAL)
|
||||
-- put error message `a_message'.
|
||||
local
|
||||
l_errors: like errors
|
||||
utf: UTF_CONVERTER
|
||||
@@ -145,35 +149,35 @@ feature {NONE} -- Implementation
|
||||
create {ARRAYED_LIST [STRING]} l_errors.make (1)
|
||||
errors := l_errors
|
||||
end
|
||||
l_errors.force (utf.utf_32_string_to_utf_8_string_8 (a_code))
|
||||
l_errors.force (utf.utf_32_string_to_utf_8_string_8 (a_message))
|
||||
end
|
||||
|
||||
item (a_item: JSON_OBJECT): GCSE_PAGE_ITEM
|
||||
-- Google Result Metadata Item.
|
||||
do
|
||||
create Result
|
||||
if attached {JSON_STRING} a_item.item (create {JSON_STRING}.make_from_string ("kind")) as l_kind then
|
||||
if attached {JSON_STRING} a_item.item ("kind") as l_kind then
|
||||
Result.set_kind (l_kind.item)
|
||||
end
|
||||
if attached {JSON_STRING} a_item.item (create {JSON_STRING}.make_from_string ("title")) as l_title then
|
||||
if attached {JSON_STRING} a_item.item ("title") as l_title then
|
||||
Result.set_title (l_title.item)
|
||||
end
|
||||
if attached {JSON_STRING} a_item.item (create {JSON_STRING}.make_from_string ("htmlTitle")) as l_htmltitle then
|
||||
Result.set_html_title (l_htmltitle.item)
|
||||
if attached {JSON_STRING} a_item.item ("htmlTitle") as l_htmltitle then
|
||||
Result.set_html_title (l_htmltitle.unescaped_string_32)
|
||||
end
|
||||
if attached {JSON_STRING} a_item.item (create {JSON_STRING}.make_from_string ("link")) as l_link then
|
||||
if attached {JSON_STRING} a_item.item ("link") as l_link then
|
||||
Result.set_link (l_link.item)
|
||||
end
|
||||
if attached {JSON_STRING} a_item.item (create {JSON_STRING}.make_from_string ("displayLink")) as l_display_link then
|
||||
if attached {JSON_STRING} a_item.item ("displayLink") as l_display_link then
|
||||
Result.set_display_link (l_display_link.item)
|
||||
end
|
||||
if attached {JSON_STRING} a_item.item (create {JSON_STRING}.make_from_string ("snippet")) as l_snippet then
|
||||
Result.set_snippet (l_snippet.item)
|
||||
if attached {JSON_STRING} a_item.item ("snippet") as l_snippet then
|
||||
Result.set_snippet (l_snippet.unescaped_string_8)
|
||||
end
|
||||
if attached {JSON_STRING} a_item.item (create {JSON_STRING}.make_from_string ("htmlSnippet")) as l_html_snippet then
|
||||
Result.set_html_snippet (l_html_snippet.item)
|
||||
if attached {JSON_STRING} a_item.item ("htmlSnippet") as l_html_snippet then
|
||||
Result.set_html_snippet (l_html_snippet.unescaped_string_32)
|
||||
end
|
||||
if attached {JSON_STRING} a_item.item (create {JSON_STRING}.make_from_string ("formattedUrl")) as l_formatted_url then
|
||||
if attached {JSON_STRING} a_item.item ("formattedUrl") as l_formatted_url then
|
||||
Result.set_formatted_url (l_formatted_url.item)
|
||||
end
|
||||
end
|
||||
@@ -181,22 +185,26 @@ feature {NONE} -- Implementation
|
||||
query_page (a_page_key: JSON_STRING; a_queries: JSON_OBJECT): detachable GCSE_PAGE
|
||||
-- Google result medata query. Return a query page based for a query with page key `a_page_key', if any.
|
||||
do
|
||||
if attached {JSON_ARRAY} a_queries.item (a_page_key) as jquerypage and then attached {JSON_OBJECT} jquerypage.i_th (1) as jpage then
|
||||
if
|
||||
attached {JSON_ARRAY} a_queries.item (a_page_key) as jquerypage and then
|
||||
jquerypage.count > 0 and then
|
||||
attached {JSON_OBJECT} jquerypage.i_th (1) as jpage
|
||||
then
|
||||
create Result
|
||||
if attached {JSON_STRING} jpage.item (create {JSON_STRING}.make_from_string ("title")) as l_title then
|
||||
if attached {JSON_STRING} jpage.item ("title") as l_title then
|
||||
Result.set_title (l_title.item)
|
||||
end
|
||||
if attached {JSON_STRING} jpage.item (create {JSON_STRING}.make_from_string ("totalResults")) as l_results then
|
||||
if attached {JSON_STRING} jpage.item ("totalResults") as l_results then
|
||||
Result.set_total_results (l_results.item.to_integer)
|
||||
end
|
||||
if attached {JSON_STRING} jpage.item (create {JSON_STRING}.make_from_string ("searchTerms")) as l_search_terms then
|
||||
if attached {JSON_STRING} jpage.item ("searchTerms") as l_search_terms then
|
||||
Result.set_search_terms (l_search_terms.item)
|
||||
end
|
||||
-- TODO check if we should use INTEGER_64
|
||||
if attached {JSON_NUMBER} jpage.item (create {JSON_STRING}.make_from_string ("count")) as l_count then
|
||||
if attached {JSON_NUMBER} jpage.item ("count") as l_count then
|
||||
Result.set_count (l_count.integer_64_item.as_integer_32)
|
||||
end
|
||||
if attached {JSON_NUMBER} jpage.item (create {JSON_STRING}.make_from_string ("startIndex")) as l_index then
|
||||
if attached {JSON_NUMBER} jpage.item ("startIndex") as l_index then
|
||||
Result.set_start_index (l_index.integer_64_item.as_integer_32)
|
||||
end
|
||||
end
|
||||
@@ -204,30 +212,15 @@ feature {NONE} -- Implementation
|
||||
|
||||
feature {NONE} -- JSON Keys
|
||||
|
||||
queries_key: JSON_STRING
|
||||
do
|
||||
create Result.make_from_string ("queries")
|
||||
end
|
||||
queries_key: STRING = "queries"
|
||||
|
||||
next_page_key: JSON_STRING
|
||||
do
|
||||
create Result.make_from_string ("nextPage")
|
||||
end
|
||||
next_page_key: STRING = "nextPage"
|
||||
|
||||
request_key: JSON_STRING
|
||||
do
|
||||
create Result.make_from_string ("request")
|
||||
end
|
||||
request_key: STRING = "request"
|
||||
|
||||
previous_page_key: JSON_STRING
|
||||
do
|
||||
create Result.make_from_string ("previousPage")
|
||||
end
|
||||
previous_page_key: STRING = "previousPage"
|
||||
|
||||
items_key: JSON_STRING
|
||||
do
|
||||
create Result.make_from_string ("items")
|
||||
end
|
||||
items_key: STRING = "items"
|
||||
|
||||
note
|
||||
copyright: "2011-2015 Javier Velilla, Jocelyn Fiat, Eiffel Software and others"
|
||||
|
||||
Reference in New Issue
Block a user