Skip to content

PHP-библиотека для парсинга Яндекса — организации и отзывы с Яндекс Карт, товары с Яндекс Маркета, недвижимость с Яндекс Недвижимости. Типизированные DTO. Работает через Apify.

Notifications You must be signed in to change notification settings

Scraper-APIs/yandex-parser-php

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yandex Parser PHP

English | Русский

PHP-библиотека для парсинга данных Яндекса: организации и места (Яндекс Карты), отзывы (Яндекс Карты), товары (Яндекс Маркет), недвижимость (Яндекс Недвижимость).

Работает через Apify API — запускает акторы и возвращает типизированные DTO.

Установка

composer require scraper-apis/yandex-parser

Быстрый старт

use YandexParser\Client;

$client = new Client('apify_api_ваш_токен');

// Поиск ресторанов в Москве
$places = $client->scrapePlaces(
    query: ['ресторан'],
    location: 'Москва',
    maxResults: 50,
);

foreach ($places as $place) {
    echo "{$place->title}{$place->address}" . PHP_EOL;
    echo "Рейтинг: {$place->rating}, отзывов: {$place->reviewCount}" . PHP_EOL;

    if ($place->hasContactInfo()) {
        echo "Тел: {$place->getFirstPhone()}" . PHP_EOL;
    }
}

Методы

Организации (Яндекс Карты)

use YandexParser\Language;

$places = $client->scrapePlaces(
    query: ['стоматология', 'клиника'],
    location: 'Санкт-Петербург',
    maxResults: 200,
    language: Language::Russian,
    options: [
        'filterRating' => 4.5,
        'filterOpenNow' => true,
        'filterCardPayment' => true,
        'maxPhotos' => 5,
    ],
);

Отзывы (Яндекс Карты)

use YandexParser\ReviewSort;

$reviews = $client->scrapeReviews(
    startUrls: ['https://yandex.ru/maps/org/pushkin/1124715036/'],
    maxReviewsPerPlace: 100,
    reviewSort: ReviewSort::Newest,
    minRating: 1,
    maxRating: 3,
);

foreach ($reviews as $review) {
    echo "{$review->authorName}: {$review->rating}/5" . PHP_EOL;

    if ($review->hasBusinessReply()) {
        echo "Ответ: {$review->getBusinessReplyText()}" . PHP_EOL;
    }
}

Товары (Яндекс Маркет)

use YandexParser\MarketSort;
use YandexParser\MarketRegion;

$products = $client->scrapeProducts(
    query: 'ноутбук ASUS',
    maxItems: 50,
    region: MarketRegion::Moscow,
    sort: MarketSort::PriceAsc,
    options: [
        'priceFrom' => 30000,
        'priceTo' => 80000,
    ],
);

foreach ($products as $product) {
    echo "{$product->title}{$product->getPriceFormatted()}" . PHP_EOL;
    echo "Продавец: {$product->sellerName}, рейтинг: {$product->rating}" . PHP_EOL;

    $discount = $product->getYaBankDiscount();
    if ($discount !== null) {
        echo "Скидка по Я.Банку: {$discount}%" . PHP_EOL;
    }
}

Недвижимость (Яндекс Недвижимость)

use YandexParser\DealType;
use YandexParser\PropertyCategory;
use YandexParser\RealtySort;

$listings = $client->scrapeListings(
    location: 'Москва',
    dealType: DealType::Sell,
    category: PropertyCategory::Apartment,
    maxItems: 50,
    sort: RealtySort::PriceAsc,
    roomsTotal: ['1', '2'],
    options: [
        'priceMin' => 5000000,
        'priceMax' => 15000000,
    ],
);

foreach ($listings as $listing) {
    echo "{$listing->getAddress()}{$listing->getPriceValue()}" . PHP_EOL;
    echo "Площадь: {$listing->getAreaValue()} м², этаж: {$listing->floorsOffered[0] ?? '?'}/{$listing->floorsTotal}" . PHP_EOL;

    if ($listing->hasPhones()) {
        echo "Тел: {$listing->getFirstPhone()}" . PHP_EOL;
    }

    if (!$listing->isFromOwner()) {
        echo "Агентство: {$listing->getSellerName()}" . PHP_EOL;
    }
}

Перечисления

Enum Значения
Language Auto, Russian, English, Turkish, Ukrainian, Kazakh
ReviewSort Relevance, Newest, Highest, Lowest
MarketSort Default, Popular, PriceAsc, PriceDesc, Rating
MarketRegion Moscow, SaintPetersburg, Yekaterinburg, Kazan, Novosibirsk, NizhnyNovgorod, Samara, RostovOnDon, Krasnodar, Chelyabinsk, Ufa, Perm, Voronezh, Volgograd, Krasnoyarsk, Omsk
DealType Sell, Rent
PropertyCategory Apartment, Rooms, House, Lot, Commercial, Garage
RealtySort Relevance, Newest, PriceAsc, PriceDesc, AreaAsc, AreaDesc, CommissioningDate

Конфигурация

use YandexParser\Client;
use YandexParser\Config;

// Изменить таймаут или базовый URL
$client = new Client('токен', new Config(
    apiToken: 'токен',
    timeout: 600,
));

Обработка ошибок

use YandexParser\Exception\ApiException;
use YandexParser\Exception\RateLimitException;

try {
    $places = $client->scrapePlaces(query: ['кафе'], location: 'Казань');
} catch (RateLimitException $e) {
    sleep($e->retryAfter);
    // повторить запрос
} catch (ApiException $e) {
    echo "Ошибка API: {$e->getMessage()}" . PHP_EOL;
}

Требования

См. также

  • 2GIS Parser PHP — парсинг 2ГИС (организации и отзывы, недвижимость, вакансии)

Лицензия

MIT

About

PHP-библиотека для парсинга Яндекса — организации и отзывы с Яндекс Карт, товары с Яндекс Маркета, недвижимость с Яндекс Недвижимости. Типизированные DTO. Работает через Apify.

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages