Данные захвата из файла CSV содержат переменную для запроса API для сохранения в новом файле CSV - PullRequest
1 голос
/ 08 мая 2020

Мне нужен номер отслеживания и номер заказа, когда каждая строка уникального идентификатора отправляет запрос API на URL-адрес и фиксирует его для сохранения в новом файле CSV вместе с ответом API. Мне действительно нужна помощь для этого: /

packet.csv (файл CSV содержит переменную для запроса API)

- Tracking #,Order #,Unique ID
- AB74832493,0dajKDhsa,478324
- CD78437294,kDHIdsan98,768542

track.csv (ответ API)

delivered,"2020-04-21 13:10:12"
delivered,"2020-02-29 12:55:51"
delivered,"2020-04-21 12:42:16"

желаемый track.csv (ответ API) :

Tracking #,Order#,Status,Date  ((get the tracking and order from packet.csv)
0CS7lPuyKzO6,YT2010421266182766,delivered,"2020-04-21 13:10:12"
327231739327,YT7328729173217832,delivered,"2020-02-29 12:55:51"
743287493274,YT7438749327489324,delivered,"2020-04-21 12:42:16"

Контроллер:

public function getstatusbyid()
    {

        $csv_file = file('C:\wamp64\www\tetsing\application\csv\packet.csv');
        $csv_data = [];
        foreach ($csv_file as $line) {
            $csv_data[] = str_getcsv($line);
        }

        $order_no = json_encode(array_column($csv_data, '0'));
        $tracking = json_encode(array_column($csv_data, '1'));
        $unique_id = array_column($csv_data, '2');
        $access_key = 'SOMETHING';

        if (FALSE === ($fp = fopen('C:\wamp64\www\testing\application\csv\track.csv', 'w'))) {
            die("Error opening CSV file."); // TO DO: handle this better
        }

        foreach ($unique_id as $i => $id) {
            $url = "https://track.my/api/getstatusbyid/$id";

            $data = array(
                'unique_id'       => $id,
                'access_key'      => $access_key
            );

            $data_string = json_encode($data);

            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 120);

            $result = curl_exec($curl);

            curl_close($curl);

            $resultinfo = json_decode($result, true);
            echo '<pre>';
            print_r($resultinfo);

            $status = $resultinfo["status"];
            $date = $resultinfo["last_action_date_time"];

            $resultdata = array();

            $resultdata[] = array(
                'status'    => $status,
                'date'      => $date
            );

            if ($status == 'delivered') {
                foreach ($resultdata as $fields) {
                    fputcsv($fp, $fields);
                }
            }
        }
        fclose($fp);
    }

1 Ответ

1 голос
/ 08 мая 2020

См. Этот обновленный код с комментариями для описания происходящего. По сути, вам нужно l oop через каждую строку в packet.csv, сделать соответствующий вызов cURL и вывести результаты:

public function getstatusbyid()
    {
        $access_key = 'SOMETHING';
        $url = "https://track.my/api/getstatusbyid/$id";

        if (FALSE === ($fp = fopen('C:\wamp64\www\testing\application\csv\track.csv', 'w'))) {
            die("Error opening CSV file."); // TO DO: handle this better
        }

        $csv_file = file('C:\wamp64\www\tetsing\application\csv\packet.csv');

        // Loop through each line in packet.csv:
        foreach ($csv_file as $line) {
            $csv_data = str_getcsv($line); // Get the next line

            list( $order_no, $tracking, $id ) = $csv_data; // Split it up

            $data = array(
                'unique_id'       => $id,
                'access_key'      => $access_key
            );

            $data_string = json_encode($data);

            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 120);

            $result = curl_exec($curl);

            curl_close($curl);

            $resultinfo = json_decode($result, true);
            echo '<pre>';
            print_r($resultinfo);

            $status = $resultinfo["status"];
            $date = $resultinfo["last_action_date_time"];

            // Create the array of data to output:
            $resultdata = array(
                'tracking'  => $tracking,
                'order'     => $order_no,
                'status'    => $status,
                'date'      => $date
            );

            if ($status == 'delivered') {
                fputcsv($fp, $resultdata);
            }

        }

        fclose($fp);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...