diff --git a/data/googlesearch.json.example b/data/googlesearch.json.example index ec4bfdf52b8b9fc32ac431f204fdae1e33cef7c7..ae87c944bc05cc09426f079f26fdec957edbe8b8 100644 --- a/data/googlesearch.json.example +++ b/data/googlesearch.json.example @@ -1,7 +1,7 @@ { "host" : "https://www.googleapis.com", - "path" : "/customsearch/v1element", + "path" : "/customsearch/v1", "key" : "Yourcustomsearchapikey", "num" : "1", "cx" : "some-cx:id" -} \ No newline at end of file +} diff --git a/plugins/search.rb b/plugins/search.rb index e880cba3d246ccdb57d6d5eed5ee7a84dee8e332..441ebb6f3b247e8cf8b99cff23511ec1502d19ae 100644 --- a/plugins/search.rb +++ b/plugins/search.rb @@ -21,11 +21,11 @@ class Search @googleapiconf = 'googlesearch.json' @googleurl = '' - + @isbndbapihost = "isbndb.com" @isbndbapipath = "/api/books.xml?access_key=%APIKEY%&index1=isbn&value1=" @isbndbapifile = "isbndb.apikey" - + loadisbndbapikey loadgoogleconfig end @@ -41,12 +41,12 @@ class Search arguments.gsub!( / /, "+" ) # Sanitize search request # Retreive JSON agent = Mechanize.new + page = agent.get( "#{ @googleurl }#{ CGI::escape( arguments ) }" ) + json = page.body + res = JSON.parse( json ) + puts res.inspect + result = "#{res['items'][0]['link']} - #{res['items'][0]['title']}: #{res['items'][0]['snippet']}" - page = agent.get( "#{ @googleurl }#{ CGI::escape( arguments ) }" ) - json = page.body - res = JSON.parse( json ) - result = "#{ res[ 'results' ][ 0 ][ 'unescapedUrl' ] } - #{ res[ 'results' ][ 0 ][ 'titleNoFormatting' ] }" - if( result.empty? ) result = "Error: No result." end @@ -60,23 +60,23 @@ class Search @irc.message( from, result ) end end - + # Function to search book titles by ISBN number def isbn( nick, user, host, from, msg, arguments, con ) if( !arguments.nil? && !arguments.empty? ) arguments.gsub!( /[^0-9\-]/, "" ) # Sanitize ISBN number - + # Retreive XML xml = Net::HTTP.get( @isbndbapihost, @isbndbapipath + arguments ) result = isbndbxmlparse( xml ) - + if( result.empty? ) result = "Error: No result." end else result = "Invalid input. Expecting search query." end - + if( con ) @output.c( result + "\n" ) else @@ -107,54 +107,47 @@ class Search # XML parser for ISBNdb results def isbndbxmlparse( xmldoc ) xmldoc = Nokogiri::XML( xmldoc ) - + title = xmldoc.at_xpath( "//ISBNdb/BookList/BookData/Title" ) - + if( title.instance_of? NilClass ) return "" else return "Book title: #{title.text}" end end - + # Load API key for ISBNdb def loadisbndbapikey() # Check if a appid is stored on disk if File.exist?( @config.datadir + '/' + @isbndbapifile ) - + # Make sure there's a variable instance apikey = "" - + # Read database from file file = File.open( @config.datadir + '/' + @isbndbapifile ) - + file.each do |line| apikey << line end apikey.gsub!( /[:blank:\n\r]/, "" ) file.close - + # Replace string token with actual key @isbndbapipath.gsub!( /%APIKEY%/, apikey ) else - @output.bad( "Could not load API key from #{@config.datadir}/#{@isbndbapifile} for ISBNdb search." ) + @output.bad( "Could not load API key from #{@config.datadir}/#{@isbndbapifile} for ISBNdb search.\n" ) end end # Load google custom search api config def loadgoogleconfig if File.exist?( @config.datadir + '/' + @googleapiconf ) + cnf = JSON.parse File.read( "#{@config.datadir}/#{@googleapiconf}" ) - jsonline = "" - File.open( @config.datadir + '/' + @googleapiconf ) do |file| - file.each do |line| - jsonline << line - end - end - - cnf = JSON.parse( jsonline ) @googleurl = "#{ cnf[ 'host' ] }#{ cnf[ 'path' ] }?key=#{ cnf[ 'key' ] }&num=#{ cnf[ 'num' ] }&cx=#{ cnf[ 'cx' ] }&q=" else - @output.bad( "Could not load API data from #{@config.datadir}/#{@googleapiconf} for Google custom search." ) + @output.bad( "Could not load API data from #{@config.datadir}/#{@googleapiconf} for Google custom search.\n" ) end end end