2

on_pages_likeURLを特定の一致に保存したい。アネモネはその役割を果たしており、URL を保存するレコードが作成されていますが、次のようになります。

  1. find_or_create_by_urlの代わりに のようなものを使用したいcreate!ので、毎回レコードを複製しません。
  2. URLを保存したい。現在、URL は次のように DB に保存されています。

    --- !ruby/object:URI::HTTP スキーム: http ユーザー: パスワード: ホスト: www.a4apps.com ポート: 80 パス: /Websites/SampleCalendar/tabid/89/Default.aspx クエリ: 不透明: レジストリ: フラグメント: パーサー:

私はそれが好きです:

http://www.a4apps.com//Websites/SampleCalendar/tabid/89/Default.aspx

Postgres テーブルに保存する理由は、後で別のタスクで各レコードの URL を使用してそのテーブルを変更する必要があるためです。私はこれが初めてで、2 つ目の DB を追加するという考えに少し圧倒されました。アネモネのサイトで提案されました。

ここ数日、基本的なコードを微調整してみましたが、まだ解決策が見つかりません。

これは私のレーキタスクです:

namespace :db do
  desc "Fetch a4apps urls"
  task :fetch_a4apps => :environment do
    require 'anemone'
    Anemone.crawl("http://www.a4apps.com/") do |anemone|
      anemone.on_pages_like(/\/SampleCalendar\/[^?]*$/) do |page|
        Calendarparts.create!(:url => page.url)
      end
    end
  end
end

私のビューは、データを Web ページに出力する以外に何もしません。

<% @calendar.each do |part| %>
    <tr valign="top">...
             <td><%= part.url %>&nbsp;</td>...
    </tr>
<% end %>

私のコントローラー:

class CalendarController < ApplicationController
  def cainventory
    @calendar = Calendarparts.all
  end
end
4

1 に答える 1

0

わかりましたので、私はそれを理解したと思います。理想的/正しい方法かどうかはわかりませんが、URL からパス部分を取り出して、元のドメインを先頭に追加しています。

namespace :db do
  desc "Fetch a4apps urls"
  task :fetch_a4apps => :environment do
    require 'anemone'
    website = 'http://www.a4apps.com'
    Anemone.crawl(website) do |anemone|
      anemone.on_pages_like(/\/SampleCalendar\/[^?]*$/) do |page|
        Calendarparts.find_or_create_by_url(:url => website + page.url.path)
      end
    end
  end
end
于 2012-11-02T17:49:41.687 に答える