Если я понимаю ваш вопрос, вы в основном работаете над сайтом агрегатора каналов?
Вы можете сделать следующее; начните с обновления каждые 1 час (например). Если у вас достаточно записей из какого-либо канала - подсчитайте средний интервал между записями. Затем используйте этот интервал в качестве интервала для получения этого канала.
Например, если сайт опубликовал 7 статей за последние 7 дней - вы можете получать с него фиды каждые 24 часа (1 день).
Я использую этот алгоритм с небольшими изменениями, когда я вычисляю этот средний интервал, я делю его на 2 (чтобы не вызывать слишком редко). Если результат составляет менее 60 минут - я устанавливаю интервал в 1 час, или он больше 24, я устанавливаю его в 24 часа.
Например, что-то вроде этого:
public function updateRefreshInterval() {
$sql = 'select count(*) _count ' .
'from article ' .
'where created>adddate(now(), interval -7 day) and feed_id = ' . (int) $this->getId();
$array = Db::loadArray( $sql );
$count = $array[ '_count' ];
$interval = 7 * 24 * 60 * 60 / ( $count + 1 );
$interval = $interval / 2;
if( $interval < self::MIN_REFRESH_INTERVAL ) {
$interval = self::MIN_REFRESH_INTERVAL;
}
if( $interval > self::MAX_REFRESH_INTERVAL ) {
$interval = self::MAX_REFRESH_INTERVAL;
}
Db::execute( 'update feed set refresh_interval = ' . $interval . ' where id = ' . (int) $this->getId() );
}
Таблица «feed», «refreshed» - это отметка времени, когда канал был обновлен в последний раз, а «refresh_interval» - желаемый интервал времени между двумя выборками одного и того же канала.