Резюме
Я участвую в проекте поискового робота PHP и хочу извлекать RSS-каналы новостей почти с сотни новостных веб-сайтов с помощью wget (версия 1.12) для захвата всех файлов RSS-каналов в одном каталоге. (без иерархии) на локальном сервере в отношении:
- Некоторые из этих веб-сайтов не имеют RSS-канала, поэтому мне нужно захватить и проанализировать их
HTML
, но вначале я могу просто сосредоточиться на XML-каналах. - Все файлы каналов со всех сайтов в одном каталоге.
- Никакой дополнительный контент не скачивается. весь дополнительный контент (например, изображения, если они есть) должен размещаться на пульте дистанционного управления.
- Производительность важна
- Файлы каналов необходимо переименовать перед сохранением в соответствии с моим соглашением, например
source.category.type.xml
(каждый удаленный URL-адрес XML имеет свой собственный источник, категорию и тип, но не в соответствии с моим соглашением об именах) - Некоторые из этих каналов не включают метку времени новостей, как в случае с
<pubDate>
, поэтому я должен выбрать хороший рабочий подход, чтобы обрабатывать время новостей, даже с небольшой разницей, но надежным, работающим и всегда функциональным. - Чтобы автоматизировать это, мне нужно регулярно выполнять задание cron на этом wget.
url-list.txt
включает:
http://source1/path/to/rss1
http://source2/diiferent/path/to/rss2
http://source3/path/to/rss3
.
.
.
http://source100/different/path/to/rss100
Я хочу этот:
localfeed/source1.category.type.xml
localfeed/source2.category.type.xml
localfeed/source3.category.type.xml
.
.
.
localfeed/source100.category.type.xml
Категория и тип могут иметь несколько предопределенных значений, например sport
, ...
Что у меня есть?
На самом первом уровне я должен делать мои wget
, используя список удаленных URL: Согласно эти инструкции wget:
url-list.txt
должен состоять из серии URL-адресов, по одному в каждой строке.- При запуске
wget
без-N
,-nc
,-r
или-p
загрузка того же файла в том же каталоге приведет к сохранению исходной копииFILE
, а второй копии будет присвоено имяFILE.1
. - Использование
-O
, напримерwget -O FILE
, не означает просто «использовать имя ФАЙЛ вместо имени в URL». Он выводит все загрузки только в один файл. - Используйте
-N
для отметки времени -w SECONDS
будет удерживатьсяSECONDS
секунд до следующего извлечения-nd
заставляетwget
не создавать иерархию каталогов при рекурсивном извлечении. Если эта опция включена, все файлы будут сохраняться в текущем каталоге без затирания (если имя отображается более одного раза, имена файлов будут иметь расширение `.n ')-nH
отключает создание каталогов с префиксом хоста (поведение, которое-r
по умолчанию).-P PREFIX
устанавливает префикс каталога в PREFIX. «Префикс каталога» - это каталог, в котором будут сохранены все другие файлы и подкаталоги, то есть верхняя часть дерева поиска.-k
преобразует ссылки для просмотра в автономном режиме$ wget -nH -N -i url-list.txt
Проблемы с (wget & cron job и php):
Как управлять временем новостей? лучше ли сохранять метку времени в именах файлов, таких как
source.category.type.timestamp.xml
, или получать время изменения, используя функциюphp
sstat
следующим образом:$stat = stat('source.category.type.xml'); $time = $stat('mtime'); //last modification time
или любые другие идеи (которые всегда работают и надежны)
Как обрабатывать имена файлов? Я хочу сохранять файлы локально в соответствии с определенным соглашением (
source.category.type.xml
), и поэтому я думаю, чтоwget options
, например,--trust-server-names
или--content-disposition
, не могут помочь. Я думаю, мне следует перейти к следующему циклу while:while read url; do wget -nH -N -O nameConvention $url done < utl-list.txt