Следите за новостями любимого конструктора сайтов uCoz в социальных сетях!
feenet.net, модуль "каталог файлов".
<?php $___notjson=1; ini_set('display_errors', '1'); require 'uAPImodule.php'; $request = new Request(array( 'oauth_consumer_key' => '***', 'oauth_consumer_secret' => '***', 'oauth_token' => '***', 'oauth_token_secret' => '***' )); $films = array(); if (empty($_GET['f1'])) $f1 = ''; if (empty($_GET['f2'])) $f2 = ''; $f1 = explode(',', $f1); $f2 = explode(',', $f2); foreach ( $f1 as $f1) { foreach( $f2 as $f2) { do { $items = json_decode($request->get('/load', array( 'category' => $_GET['c'], 'page' => $_GET['p'], 'sort' => $_GET['s'], 'filter1' => $f1, 'filter2' => $f2 )), true); foreach ( $items['loads'] as $item ) { array_push( $films, array( $item['id'], $item['title'], $item['filters'][0]['items'][0]['name'], parse_url($item['entry_url'], PHP_URL_PATH), parse_url($item['files'][0]['small'], PHP_URL_PATH), parse_url($item['files'][0]['full'], PHP_URL_PATH) )); } }while ( isset($items['pages']) and $items['pages'] >= $items['page']); } } echo json_encode($films); ?>
Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/ru/www/m/c/s/ecssjet/scripts/uAPImodule.php on line 83 Warning: Invalid argument supplied for foreach() in /home/ru/cgi/runphp.php(95) : eval()'d code on line 33 []
Никак. uApi в точности повторяет работу сайта. Раз на странице категорий нет возможности выбрать сразу 2 значения в одном и том же фильтре, то значит и в uApi такой возможности нет.
Пробовал получить все эллементы что бы фильтровать уже методами js. Но скрипт не работает, как мне кажется время выполнения долгое
Таким способом и нужно действовать. Только сразу много материалов получать не нужно, ограничивать например 200 материалами за раз.
Еще посоветовал бы все это дело кешировать в файл. Поставить проверку на время создания файла и если после создания файла прошло к примеру 24 часа, то обновлять его.
Фильтровать тоже лучше сразу на php.
try { $db = new PDO('sqlite:dbfilename.db'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch ( PDOException $e ) { exit("Ошибка в строке: " . $e->getLine() . ": " .$e->getMessage()."<br>"); }
В ней таблицу
try { $db->exec("CREATE TABLE IF NOT EXISTS `tablename` ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `title` TEXT NOT NULL, `filters` TEXT NOT NULL, `rate_sum` VARCHAR(3) DEFAULT NULL, .. и т.д. (какие строки нужно сохранять такие и добавляете) );"); } catch ( PDOException $e ) { exit("Ошибка в строке: " . $e->getLine() . ": " .$e->getMessage()."<br>"); }
$row = $db->query("SELECT * FROM `tablename` WHERE `filters` = '2,4,5' ORDER BY `rate_sum` desc")->fetchAll(PDO::FETCH_ASSOC); print_r($row);
А проверять дату создания файла dbfilename.db можно так:
$now_time = time(); // текущее время $file = "dbfilename.db"; $file_time = filemtime($file); // время изменения файла $time = $now_time - $file_time; // сколько прошло времени после создания/изменения файла (в секундах) $cache_time = 86400; (столько секунд в сутках) if ( $time >= $cache_time || filesize($file) <= 10000) { //если прошло больше суток или размер файла подозрительно маленький, то удаляем его и создаем заново }
Что касается ошибки CURLOPT_FOLLOWLOCATION . В файле uAPImodule удалите строчки 83,160,240 и 263
Что касается второй ошибки, то у вас там в переменной не массив. Перед каждым запуском форейча надо поставить проверку/, что-то вроде
if ( isset( $f1[0] ) ) if ( isset( $f2[0] ) )
if ( isset( $f1[0] ) )
if ( isset( $f2[0] ) )