2010-02-13 3 views
2

У меня есть система, которая соединяется с 2 популярными API. Мне нужно объединить данные от каждого в единый результат, который затем можно разбивать на страницы. Объем проекта означает, что система может поддерживать 10 API.Как собрать данные API?

Каждый API налагает максимальный предел 50 результатов на запрос.

Каков наилучший способ объединения этих данных таким образом, чтобы оно надежно т.е. упорядоченный, никаких дубликатов и т.д.

Я использую рамки CakePHP на окружающую среду ЛАМПЫ, однако, я не думаю, что этот вопрос касается всех языков программирования.

Мой подход до сих пор заключается в том, чтобы запросить API поиска каждого провайдера, а затем заполнить таблицу MySQL. Из этого результаты упорядочены, разбиты на страницы и т. Д. Однако моя забота - это производительность: связь API, разбор, вставка, а затем чтение всего за одно исполнение.

Я что-то упускаю, есть ли у кого-нибудь другие идеи? Я уверен, что это распространенная проблема со многими альтернативными решениями.

Любая помощь была бы принята с благодарностью.

ответ

1

Да, это распространенная проблема.

Поиск SO для вопросов, как https://stackoverflow.com/search?q=%5Bphp%5D+background+processing

Каждый, кто пытается это понимает, что вызов других сайтов для данных идет медленно. Первый или два кажутся быстрыми, но другие сайты ломаются (а ваши перерывы на приложения) и другие сайты медленны (и ваше приложение работает медленно).

Вам необходимо отключить внешний интерфейс от внешнего.

Выбор 1 - предварительный запрос данных фоновым процессом, который просто получает и загружает базу данных.

Выбор 2 - запустите длительный фоновый процесс и вернитесь с помощью функции JavaScript, чтобы проверить, выполнено ли это еще.

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

1

У меня есть сайт делает только, что с более чем 100 RSS/ATOM каналы, это то, что я делаю:

  1. У меня есть список каналов и задания: перебирает их, около 5 Питает минута, что означает, что я просматриваю все каналы каждые 20 минут или около того.
  2. Я поднимаю канал и пытаюсь вставить каждую запись в базу данных, используя url как уникальное поле, если url существует, я не вставляю. дата ввода - это текущие системные часы и вставляется моим приложением, поскольку поля даты в rss не могут быть доверены, а в некоторых случаях даже не могут быть проанализированы.
  3. для некоторых каналов, и только экспериментатор может сказать вам, что я также ищу дубликаты названий, некоторые веб-сайты меняют URL-адреса по их собственным причинам.
  4. элементы теперь размещены в одной и той же таблице базы данных, готовые к опросу.

Последняя мысль: если ваше приложение, скорее всего, будет иметь новые фиды, добавленные во время производства, вы также должны проверить, является ли канал «новым» (т. Е. Не имеет предыдущих записей в db), если это вы должны пометить все доступные в настоящий момент ссылки как неактивные, иначе при добавлении фида будет блок статей из этого фида, все с одинаковыми датами и временем. (просто поставьте: метод, который я описал, предназначен для будущих дополнений к фиду, последние статьи будут недоступны).

надеюсь, что это поможет.

+1

еще один: если вы не можете использовать cron по какой-либо причине, вы всегда можете использовать веб-службы pinging, такие как http://www.watchour.com/ (которые, я чувствую, что я должен разглашать, управляемый моим другом). пожалуйста, свяжитесь со мной напрямую, если вы думаете, что я могу помочь. –

+0

Спасибо за замечательные комментарии и советы. Я должен был упомянуть, что приложение, которое я создаю, является инструментом поиска. Я использую API поиска и должен отображать результаты в реальном времени. Подумайте, сравнивает ли сайты страхования автомобилей. Я думаю, что страница, которую пользователь ждет, пока выполняются вычисления, может быть лучшим с помощью поисковой системы. Как вы думаете? – Mindblip

+0

, если, как вы сказали, это может привести к тому, что десятки отдельных агрегатов api будут объединены, вы не сможете сделать это на странице-загрузке, за исключением самых уязвимых аудиторий. ни один «нормальный» пользователь Интернета не захочет ждать более 6-7 секунд. –

Смежные вопросы