Проблемы с фильтрацией результатов API с помощью PHP/условных выражений

Во-первых, заранее приносим извинения за, может быть, довольно зеленый вопрос! Я только что освоился с PHP, и для API нет тонны поддержки...

В настоящее время я пытаюсь отфильтровать некоторые результаты листинга, которые я вернул с помощью Etsy API. Я хотел бы ограничить их только определенной категорией или идентификатором таксономии, но ни одно из условных выражений PHP, которые я использую, похоже, не возвращает никаких результатов. Несколько вещей, которые я пробовал до сих пор:

<?php

define("API_KEY", XXX);

$url = "https://openapi.etsy.com/v2/listings/active?tags=unicorn,unicorns&keywords=unicorn,unicorns&includes=Images:1:0&api_key=" . API_KEY;

while (isset($url) && $url != '' && $next_page < 3) {

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$response_body=curl_exec($curl);
curl_close($curl);

$response = json_decode($response_body);

$taxo = $response->results->taxonomy_id;

if($taxo == 66) {

    foreach ($response->results as $listing) {
            echo "<li>"
            . '<a href="' . $listing->url . '" target="_blank"><img src="' . $listing->Images[0]->url_170x135 . '" alt=""></a>'
            . "<p>" . $listing->title . "</p>"
            . "<p>~*~" . $listing->price . " " . $listing->currency_code . "~*~</p>" .
            $listing->taxonomy_id .
            "</li>";
}
} else {
    echo "NO RESULTS";
}

$next_page = $response->pagination->next_page;
$baseUrl = "https://openapi.etsy.com/v2/listings/active?tags=unicorn,unicorns&keywords=unicorn,unicorns&includes=Images:1:0&api_key=" . API_KEY . "&page=";
$url = $baseUrl . $next_page;

}

?>

Я пробовал как для, так и для здесь:

<?php

define("API_KEY", XXX);

$url = "https://openapi.etsy.com/v2/listings/active?tags=unicorn,unicorns&keywords=unicorn,unicorns&includes=Images:1:0&api_key=" . API_KEY;

if(isset($url) && $url != '' && $next_page < 3 && $taxo == 66) {

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$response_body=curl_exec($curl);
curl_close($curl);

$response = json_decode($response_body);

$taxo = $response->results->taxonomy_id;

foreach ($response->results as $listing) {
    echo "<li>"
    . '<a href="' . $listing->url . '" target="_blank"><img src="' . $listing->Images[0]->url_170x135 . '" alt=""></a>'
    . "<p>" . $listing->title . "</p>"
    . "<p>~*~" . $listing->price . " " . $listing->currency_code . "~*~</p>" .
    $listing->taxonomy_id .
    "</li>";
}

$next_page = $response->pagination->next_page;
$baseUrl = "https://openapi.etsy.com/v2/listings/active?tags=unicorn,unicorns&keywords=unicorn,unicorns&includes=Images:1:0&api_key=" . API_KEY . "&page=";
$url = $baseUrl . $next_page;

var_dump($url);

}

else {
echo "NO RESULTS";
}

?>

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


Примеры ответов, возвращенных для листинга с использованием вызова, включенного в приведенный выше код:

полученные результаты:

Ладно, я разобрался! На случай, если кто-то еще ищет ответ в будущем, мое несколько запутанное решение:


person abbeycadabara    schedule 15.01.2016    source источник
comment
_1_ может быть неверным. Каково значение _2_ ?   -  person abbeycadabara    schedule 16.01.2016
comment
@Kisaragi - $taxo может иметь много разных значений, но я хотел бы отфильтровать результаты только для списков с Taxonomy_id 66. Я проверил, что Taxonomy_id имеет это значение, и что там должны быть какие-то результаты с этим идентификатором.   -  person Kisaragi    schedule 16.01.2016
comment
Нужно видеть структуру данных.   -  person abbeycadabara    schedule 16.01.2016
comment
Неправильный ключ. просто опубликуйте образец ответа   -  person Kisaragi    schedule 16.01.2016
comment
Добавлено выше - наборы результатов довольно длинные, извините за это.   -  person Kisaragi    schedule 16.01.2016
comment
Обновление по этому поводу: после некоторого дополнительного тестирования я понял, что $taxo = $response-›results-›taxonomy_id не дает результатов, если не включен в цикл foreach (хотя я действительно не понимаю, почему это так... есть подсказка? ). Тем не менее, даже если я включу $listing-›taxonomy_id в цикл foreach, а затем добавлю конкретный идентификатор в качестве условного оператора for/while, я получаю null. Это также происходит для других полей, таких как представления и т. д.   -  person abbeycadabara    schedule 16.01.2016
comment
Обратитесь к моему второму комментарию: это потому, что вы изначально не используете указатели для получения своего значения. Если вы хотите получить значение таким же образом вне цикла: _1_. Обратите внимание на _2_   -  person abbeycadabara    schedule 20.01.2016
comment
Хм. Похоже, что включение [0] вернет таксономию только для первого результата списка, а это не то, что я хочу сделать (я все еще хочу определить уникальный идентификатор для каждого списка). Это также кажется проблематичным, поскольку идентификатор этого места, скорее всего, со временем изменится. Я не возражаю установить его в цикле foreach, но похоже, что это вызывает некоторые проблемы с производительностью.   -  person Kisaragi    schedule 20.01.2016
comment
ПОТОМУ ЧТО ваше условие if будет выполняться только в том случае, если ПЕРВЫЙ ID _1_ соответствует этому условию. Поскольку вы установили это сейчас в своем цикле, он проверяет КАЖДЫЙ ID. Теперь ты понимаешь? Обратитесь к комментарию 2 ОП.   -  person abbeycadabara    schedule 25.01.2016


Ответы (1)


Все еще немного борюсь с пониманием того, почему установка $taxo вне цикла foreach не увенчалась успехом, поэтому любое понимание этого по-прежнему приветствуется.

<?php

define("API_KEY", XXX);

$url = "https://openapi.etsy.com/v2/listings/active?tags=unicorn,unicorns&keywords=unicorn,unicorns&includes=Images:1:0&api_key=" . API_KEY;

while(isset($url) && $url != '') {

    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $response_body=curl_exec($curl);
    curl_close($curl);

    $response = json_decode($response_body);

        foreach ($response->results as $listing) {

                $taxo = $listing->taxonomy_id;

                if($taxo == 41 || $taxo == 873){
                    echo '<li><a href="'
                    . $listing->url .
                    '" target="_blank"><img src="'
                    . $listing->Images[0]->url_170x135 .
                    '" alt=""></a>'
                    . "<p>" . $listing->title . "</p>"
                    . "<p>~*~" . $listing->price . " " . $listing->currency_code . "~*~</p>" .
                    $taxo . '</li>';
                }
        }

    $next_page = $response->pagination->next_page;
    $baseUrl = "https://openapi.etsy.com/v2/listings/active?tags=unicorn,unicorns&keywords=unicorn,unicorns&includes=Images:1:0&api_key=" . API_KEY . "&page=";
    $url = $baseUrl . $next_page;

}

?>

Я также должен отметить, что я могу возвращать результаты, не фильтруя по таксономии, а просто next_page.

person abbeycadabara    schedule 20.01.2016
comment
[ { listing_id: 264154010, state: "active", user_id: 22167794, category_id: 69190377, title: "Swim with Mermaids print, hand lettering, акварель, зеленый синий фиолетовый", create_tsz: 1452898819, ending_tsz: 1463349619, original_creation_tsz: 1452,898657 last_modified_tsz: 1452898849, цена: "10.00", currency_code: "USD", количество: 15, теги: [ "радуги", "единороги", "феи", "русалки", "фиолетовые", "синие", "зеленые" , "надпись от руки", "абстракция", "надпись", "рука", "акварель" ], category_path: [ "Искусство", "Печать", "Жикле" ], category_path_ids: [ 68887312, 68892154, 69190377 ], url : "https://www.etsy.com/listing/264154010/swim-with-mermaids-print-hand-lettering?utm_source=funappyay&utm_medium=api&utm_campaign=api" , taxonomy_id: 121, taxonomy_path: [ "Искусство и предметы коллекционирования", "Печать", "Жикле" ], }, { listing_id: 234448248, состояние: "активный", user_id: 30961143, category_id: 68887486, title: "Сохраняйте спокойствие и Детское одеяло Hug Me Baby Афганский вязаный крючком УЗОР от Peach.Unicorn", created_tsz: 1452898542, ending_tsz: 1463349342, original_creation_tsz: 1432388408, last_modified_tsz: 1452898542, price: "1.99", currency_code: "GBP", количество: 41, теги: [ "Baby ", "Одеяло", "Вязание крючком", "Схема вязания крючком", "Схема одеяла", "Сохраняйте спокойствие", "Пешечка", "Детское одеяло", "Мгновенная загрузка", "девочка", "малыш", "обними меня", "узор пряжи dk" ], путь_категории: [ "Узоры" ], путь_идентификатора_категории: [ 68887486 ], URL: "https://www.etsy.com/listing/234448248/keep-calm-and-hug-me-baby-blanket-afghan?utm_source=funappyay&utm_medium=api&utm_campaign=api", taxonomy_id: 729, taxonomy_path: [ "Материалы и инструменты для рукоделия", "Выкройки и учебные пособия" ], }, - person Kisaragi; 25.01.2016