Ebay Misspells Search
A small ruby script that does searches in ebay. Is able to:
- introducing some misspells in order to find those misspelled items that might be a great bargain(because nobody else is able to find them)
- able to search in more than one ebay store.
Prints out to console the search results. Of course because is in ruby, is easy to modify and play around :)
Quick and dirty pulled together, but posting here in case someone else finds it useful.
Use like so:
for multiple keyword search:
> ruby ebayfind.rb "Ibanez guitar"
for single keyword search:
> ruby ebayfind.rb Ibanez
Code:
require 'net/http'
require 'rexml/document'
require 'active_support'
class Misspell
def self.a(a_text="word", options=["skip_letter", "double_letters",
"reverse_letters","skip_spaces","missed_key","inserted_key" ])
## Sets up the params params = Hash.new
params["user_input"] = a_text
options.each do |opt|
params[opt] = opt
end
#executes a call
res = Net::HTTP.post_form(URI.parse('http://tools.seobook.com/spelling/keywords-typos.cgi'), params)
#cleans and formats results
res.body.gsub("\n", ',').scan(/<textarea rows[^>]*(.*)<\/textarea>/).flatten.to_s.gsub(">", "").split(',')
end
end
if ARGV.length == 0
puts "#{$0}: You must enter at least one argument."
exit
end
search_str = [ARGV[0]]
puts "Finding: #{search_str}"
output = ""
puts "Creating the misspells..."
search_str << Misspell.a(search_str, ["skip_letter", "double_letters", "reverse_letters","skip_spaces","missed_key","inserted_key" ])
search_str.flatten!
puts "Search item with added misspells: #{search_str.join(",")}"
#ebay_stores = {"1"=>"US", "3"=>"GB", "77"=>"DE", "71"=>"FR", "186"=>"ES", "146"=>"NL"}
ebay_stores = {"3"=>"GB", "77"=>"DE", "71"=>"FR", "186"=>"ES", "146"=>"NL"}
#Iterate through each Ebay
ebay_stores.each_key do |siteid|
# Iterate through each
search_str.each do |query_string|
# Put together an eBay parameter string
ebay_params = {
'callname' =>'FindItemsAdvanced',
'appid' =>'TODO:_YOUR_OWN_EBAY_API_ID',
'version' =>'553',
'responseencoding' =>'XML',
'siteid' =>siteid,
'MessageID '=>'',
'BidCountMax '=>'',
'BidCountMin '=>'',
'CategoryHistogramMaxChildren'=>'',
'CategoryHistogramMaxParents '=>'',
'CategoryID '=>'',
'CharityID '=>'',
'Condition '=>'',
'Currency '=>'',
'DescriptionSearch '=>'',
'EndTimeFrom '=>'',
'EndTimeTo '=>'',
'ExcludeFlag '=>'',
'FeedbackScoreMax '=>'',
'FeedbackScoreMin '=>'',
'GroupMaxEntries '=>'',
'GroupsMax '=>'',
'IncludeSelector '=>'',
'ItemsAvailableTo '=>'',
'ItemsLocatedIn '=>'',
'ItemSort '=>'',
'ItemType '=>'AllItemTypes',
'MaxDistance '=>'',
'MaxEntries '=>'',
'ModTimeFrom '=>'',
'PageNumber '=>'',
'PaymentMethod '=>'PayPal',
'PostalCode '=>'',
'PreferredLocation '=>'',
'PriceMax '=>'',
'PriceMin '=>'',
'ProductID '=>'',
'Quantity '=>'',
'QuantityOperator '=>'',
'QueryKeywords '=> (query_string.gsub(' ', '%20')),
'SearchFlag '=>'',
'SellerBusinessType '=>'',
'SellerID '=>'',
'SellerIDExclude '=>'',
'SortOrder '=>'',
'StoreName '=>'',
'StoreSearch '=>''
}.map { |key,value| "#{key.strip}=#{value}" unless value.empty? }.join("&").squeeze('&')
# Ask eBay what it knows about our query_string
ebay_response = Net::HTTP.get_response('open.api.ebay.com', '/shopping?' << ebay_params)
xml = REXML::Document.new(ebay_response.body)
# Get basic information
response3 = Hash.from_xml(xml.to_s)
xml.root.elements.each("/FindItemsAdvancedResponse/SearchResult/ItemArray/Item") do |element|
item = Hash.from_xml(element.to_s)
puts ""
puts ">> Searching for: #{query_string}, in #{bay_stores[siteid]}, got #{response3["FindItemsAdvancedResponse"]["TotalItems"]} results"
puts item['Item']['Title']
puts item['Item']['EndTime']
puts item['Item']['ConvertedCurrentPrice']
puts item['Item']['GalleryURL']
puts item['Item']['ListingType']
puts item['Item']['Condition']
puts item['Item']['ViewItemURLForNaturalSearch']
end
end
end