Показать сообщение отдельно
  #18  
Старый 17.08.2013, 14:32
Аватар для Fingolfin Fingolfin не в сети
Апостол
 
Регистрация: 20.08.2007
Сообщения: 968
Репутация: 53
Fingolfin Продвинутый пользователь
По умолчанию

Цитата:
Сообщение от Gunther
Спасибо, это слишком общий ответ на очень узкий вопрос, как написать поисковик или где взять его скрипт поковырять.
Вы нигде его не возьмёте. Поисковик для Хаддана, это скрипт исключительно для Хаддана. Он больше нигде и никому не нужен и поэтому и взять его нельзя, его просто нигде нет больше.

Ну, ок, как написать поисковик.
У вас должа быть база данных, в которую вы будите кешировать данные из АПИ Хаддана по базару. Вы должны придумать, как будет выглядеть эта база (да, я говорил, что задачи могут решаться по-разному, да). К примеру, у Вас будет одна таблица, которая будет хранить данные о магазинах, и вторая в которой будут данные о всех товарах и возможно третья, в которой будет контрольное время обновления АПИ храниться.
У вас будет 2 скрипта, первый - фоновый скрипт, который обновляет базу поисковика. Второй скрипт - это пользовательский интерфейс.

Первый скрипт, обновляющий базу, должен запускаться по таймеру и проверять, не поря ли обновить АПИ сервера Хаддана. Для этого он должен скачать соответствующий ХМЛ (можно скачать только маленький его кусочек, первые несколько сотен байт) вытащить из них время последнего обновления АПИ (представлено там в unix-формате) и сравнить его с тем, которое храниться в базе поисковика, в контрольной таблице. И если время обновления АПИ больше контрольного, нужно обновить базу по товарам полностью.

Скачивается полностью весь ХМЛ с помощью, скажем, simplexml_load'а, пример использования которого есть в соответствующей теме - http://forum.haddan.ru/showthread.php?t=7336, далее, xml разбирается по узлам (пример там опять же есть) и из него выбирается информация о магазинах и товарах в них, эта информация заносится в таблицы вашей базы - о магазинах и о товарах. Нужно придумать, как отследить закрытые магазины, в АПИ присутствуют только открытые. Простой вариант - перед обновлением данных в таблице магазинов сначала отметить все магазины как закрытые и по мере обновления данных из АПИ, отмечать каждый существующий в АПИ магазин как открытый, тогда после обновления, в базе все открытые будут отмечаны как "открытые", но и останется информация о товарах в закрытых магазах тоже, что бывает полезно.
После обновелния не забываем обновить маркер времени в базе, чтоб значть, когда следует обновить базу по товарам опять ...

Вот так примерно работает кеширующий секрипт. Он запускается по "таймеру", в unix система такой таймер называется CRON.
Запускайте, скажем раз в 15 мин его, чтоб точнее попасть на время обновления АПИ, можно хоть раз в 5 мин, это не принципиально. Если временной маркер написан правильно, лишнего трафика там будет несколько кбайт в час в итоге.

Второй скрипт реализует пользовательский интерфейс, формирует запрос пользователя в виде команды SQL, делает этот запрос и выдаёт данные в каком-то виде, в зависимости от реализации пользовательского интерфейса. Здесь вообще спложное творчество, т.е. как будут выводиться данные, в какой сортировке, какие будут выводиться, какие не будут - скажем, если в магазине нет ни скупки ни продажи, его вообще можно не выводить в результате поиска и т.п.

Ну не знаю, что тут ещё написать можно. Более контретно, это уже реализация будет, т.е. конкретно код поисковика. На слвах - вот так.
__________________
Тот, кого нельзя называть ()
Nai Silmaril maitassen, Nauglafring yatesse, ar Feanaro tielyanna
Самый быстрый поисковик по базару
Карта Лаба Древних Руин
Локатор Ополчения
Карта Хаддана

Последний раз редактировалось Fingolfin, 17.08.2013 в 14:35.
Ответить с цитированием