@4sadly

Как сократить код?

Мне нужно создавать/обновлять товары в вк
Если товара нет в бд или он не обновлялся, то надо загрузить фотографии на сервера вк
Если товара нет в бд, его нужно добавить, если есть то отредактировать и добавить item_id в параметры запроса
Хотелось бы сократить код или ускорить его работу
Вот код:
if($market_item) $is_ready_to_update = floor((time() - strtotime($market_item->updated_at->format('Y-m-d'))) / 86400) >= 1;

    if (!$market_item or $is_ready_to_update) {
        file_put_contents('tmp.png', file_get_contents(array_shift($valid_photos)));
        $main_photo = upload_photo('tmp.png', 1, $group_id_positive);
       $uploaded_photos_id = array_map(function ($valid_photo) use ($group_id_positive) {
            file_put_contents('tmp.png', file_get_contents($valid_photo));
            return upload_photo('tmp.png', 0, $group_id_positive);
        }, $valid_photos);
    }
    if ($uploaded_photos_id) {

        $params = [
            'owner_id' => $group_id_negative,
            'name' => $offer->type . ', ' . $offer->property_type . ' ' . $offer->category,
            'description' => $offer->description,
            'category_id' => CATEGORIES[intval($offer->{'category-id'})],
            'price' => intval($offer->price->value),
            'main_photo_id' => $main_photo,
            'photo_ids' => $uploaded_photos_id
        ];

        if (!$market_item) {
            $response = $vk->market()->add(ACCESS_TOKEN, $params);
            MarketItem::create([
                'internal_id' => $offer['internal-id'],
                'market_item_id' => $response['market_item_id'],
                'vk_group_id' => $group_id_negative]);
            echo $offer['internal-id'] . ' created';
            echo PHP_EOL;
        } else {
            if ($is_ready_to_update) {
                $params['item_id'] = $market_item->market_item_id;
                $response = $vk->market()->edit(ACCESS_TOKEN, $params);
                $market_item->touch();
                echo $offer['internal-id'] . ' updated';
                echo PHP_EOL;
            }
        }
    }

Заранее спасибо!
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
dimsog
@dimsog
Переносил код с PHP 4 на 7.4...
Тут не сокращать, а рефакторить нужно.
1) $is_ready_to_update выносим в отдельную функцию.
2)
file_put_contents('tmp.png', file_get_contents(array_shift($valid_photos)));

Не совсем понятно, зачем создавать временный файл в 2х разных местах для отправки его на сервер? Почему сразу файл нельзя отправить?
3)
echo $offer['internal-id'] . ' updated';
echo PHP_EOL;

echo в коде очень плохо. Используйте какой-нибудь логгер для этих целей. Но если этот код консольный и его будете видеть только вы... то ну ок.
4) Создание или обновление item я бы вынес в отдельный сервис и вызывал бы метод save(), который бы у себя внутри инкапсулировал логику обновления или создание нового элемента.
5) CATEGORIES[intval($offer->{'category-id'})] вот это однозначно выносить в отдельную функцию, что то вида findCategoryByOffer().
6) if ($uploaded_photos_id) { Notice: undefined variable вам здесь может быть обеспечена.
По коду я вижу сильную завязку на API от VK и скорость работы скрипта будет зависит от скорости этого API.
Поэтому здесь нечего ускорять, а только рефакторить.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы