Обработка сотен запросов API за один раз - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь создать панель пользователя, которая будет генерировать отчеты обо всех моих 37 игровых аккаунтах, в которых играют разные игроки. Итак, для каждого я собираю данные, а затем вычисляю сумму полученных вознаграждений. но для этого мне нужно сделать сотни запросов API и из-за ограничения max_exec_time 30se c это дает мне фатальную ошибку. а также я сбросил время на 3000, но оно завершилось примерно за 2400 (40 минут). и я могу рассчитать ручкой бумаги за 10 минут каждого счета. Итак, мне нужен быстрый способ сделать вызовы API. Благодаря



сначала он получает карты, собранные пользователями за неделю (обычно их 35-40), а затем для каждой карты проверяет редкость и фольгу карты (золотую или обычную). если это золото, тогда сохраните в массив $ isgold. но я только что проверил на золото. Есть 40 звонков, и в общей сложности у меня есть 37 учетных записей. поэтому, когда я нажимаю на кнопку «Получить отчет», он должен совершить около 1300 вызовов API, что не очень хорошо. Есть ли другой лучший способ сделать это ... ??

, если есть, пожалуйста, поделитесь им.

вот мое php веселье c

<?php
$json = json_decode(file_get_contents("https://steemmonsters.com/cards/collection/iampolite"), 1);
    $cards = $json['cards'];
    $usercards = array();
    $isgold = array();

    foreach ($cards as $card) {
        if($card['player'] == 'iampolite' ) {
            $usercards[] = $card;

            foreach($usercards as $key=>$usercard) {
                $uid = $usercard['uid'];
                $json = json_decode(file_get_contents("https://steemmonsters.com/cards/find?ids=$uid"), 1);
                $data = $json['0']['gold'];
                if($data == true){
                    $isgold[] = $uid;
                }
            }
        }
    }
print_r(count($isgold));
echo "<br><br>";
print_r($usercards);
?>

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Вкратце:

создайте класс, который сначала проверяет, существует ли уже объект (с uid), например, как файл Json. Если так, то прочитайте это. Если нет, то считайте объект из API и сохраните его как файл Json с помощью uid.

Но вы также можете собрать ВСЕ объекты в массив и сохранить их в файле Json. Затем вы всегда сначала читаете этот Json файл и при необходимости расширяете его несуществующими объектами uid.

0 голосов
/ 05 февраля 2020

у вас есть информация в вашем первом звонке.

https://steemmonsters.com/cards/collection/iampolite

{
  "player": "iampolite",
  "cards": [
    {
      "player": "davemccoy",
      "uid": "G1-1-I0SED3J72O",
      "card_detail_id": 1,
      "xp": 200,
      "gold": true,
      "edition": 1,
      "market_id": null,
      "buy_price": null,
      "last_used_block": 40381744,
      "last_used_player": "iampolite",
      "last_used_date": "2020-01-30T13:14:06.000Z",
      "last_transferred_block": null,
      "last_transferred_date": null,
      "alpha_xp": null,
      "delegated_to": "iampolite",
      "delegation_tx": "e38c7919f1e4cd6537b21323e9d8efd3d500c8b9",
      "skin": null,
      "level": 4
    },
    {
      "player": "davemccoy",
      "uid": "G1-2-ICCA0EHX8G",
      "card_detail_id": 2,
      "xp": 200,
      "gold": true,
      "edition": 1,
      "market_id": null,
      "buy_price": null,
      "last_used_block": 40381744,
      "last_used_player": "iampolite",
      "last_used_date": "2020-01-30T13:14:06.000Z",
      "last_transferred_block": null,
      "last_transferred_date": null,
      "alpha_xp": null,
      "delegated_to": "iampolite",
      "delegation_tx": "e38c7919f1e4cd6537b21323e9d8efd3d500c8b9",
      "skin": null,
      "level": 4
    },
    {
      "player": "davemccoy",
      "uid": "G1-3-REN59OW45C",
      "card_detail_id": 3,
      "xp": 200,
      "gold": true,
      "edition": 1,
      "market_id": null,
      "buy_price": null,
      "last_used_block": 40380988,
      "last_used_player": "iampolite",
      "last_used_date": "2020-01-30T12:36:06.000Z",
      "last_transferred_block": null,
      "last_transferred_date": null,
      "alpha_xp": null,
      "delegated_to": "iampolite",
      "delegation_tx": "e38c7919f1e4cd6537b21323e9d8efd3d500c8b9",
      "skin": null,
      "level": 4
    },...

, чтобы вы могли получить информацию прямо:

<?php
$json = json_decode(file_get_contents("https://steemmonsters.com/cards/collection/iampolite"), 1);
    $cards = $json['cards'];
    $usercards = array();
    $isgold = array();

    foreach ($cards as $card) {
        if($card['player'] == 'iampolite' ) {
            $usercards[] = $card;

            foreach($usercards as $key=>$usercard) {
                $uid = $usercard['uid'];

                if($usercard['gold'] == true){
                    $isgold[] = $uid;
                }
            }
        }
    }
print_r(count($isgold));
echo "<br><br>";
print_r($usercards);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...