использование Google Docs в приложении

Posted on August 25, 2009
Недавно мне понадобилось в один сервис вставить несколько страниц текста, поскольку все эти тексты были уже в виде google docs, то я написал простой класс который их получает и показывает:

require 'hpricot'

class Gdoc
  def self.get id
    text = Rails.cache.fetch("doc-#{id}", :expires_in => 15.minutes) do
      url = URI.parse('http://docs.google.com')
      res = Net::HTTP.start(url.host, url.port) do |http|
        http.get("/Doc?id=#{id}")
      end
      text = res.body
      doc = Hpricot(text)
      body = (doc/'body')
      body.search("#google-view-footer").remove
      body.search("script").remove
      body.inner_html.gsub('File?id=', 'http://docs.google.com/File?id=')
    end
    text
  end

  def self.index
    docs = Rails.cache.fetch("docs", :expires_in => 15.minutes) do
      raw = self.get GDOC_INDEX
      doc = Hpricot(raw)
      docs = []
      doc.search('//a').each do |link|
        docs << {:id => link['href'].gsub('View?docid=',''), :name => link.innerText, :path => link.innerText.downcase.gsub(' ','-')}
      end
      docs
    end
    docs
  end
end
Комментарии, думаю, излишни.

Проверка количества проиндексированных страниц:

Posted on March 27, 2009
Разные поисковые машины по разному индексируют сайт. Для того, что-бы узнать сколько страниц проиндексировал поисковик существуют различные способы.
Недавно мой блог был побанен ндексом (до сих пор не понимаю за что) и после написания пары писем в саппорт я решил написать простой скрипт для отслеживания того, появились ли в выдачи страницы с моего блога:

require 'hpricot'
require 'mechanize'

class YaChecker
  class << self
    def get_pages(url)
      url = "http://m.yandex.ru/search?query=host%3D%22www.#{url}%22%20|%20host%3D%22#{url}%22"
      agent = WWW::Mechanize.new
      agent.user_agent_alias = 'Mac Safari'
      utf_page = agent.get_file(url)
      doc = Hpricot(utf_page)
      pages = doc.search("//div[@class='result-txt']")
      result = pages[0] 

      return 0 if result.inner_text == "\nИскомая комбинация слов нигде не встречается\n"
      return result.inner_text.gsub(/Нашлось/,'').to_i
    end
  end
end
Воодушевившись результатом я написал так-же проверялку для Google:

require 'hpricot'
require 'mechanize'

class GooChecker
  class << self
    def get_pages(url)
      url = "http://www.google.ru/search?hl=ru&q=site%3A#{url}+|+site%3Awww.#{url}&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+Google&lr=&aq=f&oq="
      agent = WWW::Mechanize.new
      agent.user_agent_alias = 'Mac Safari'
      utf_page = agent.get_file(url)
      doc = Hpricot(utf_page)
      pages = doc.search("//div[@id='ssb']/p/b[3]")
      return 0 if pages[0].nil?
      pages[0].innerText.to_i
    end
  end
end
Если кому понадобится, то пользуйтесь на здоровье