2015-08-13 2 views
0

Я пытаюсь использовать API экспорта Mailchimp для создания CSV-файла всех членов данного списка. Вот documentation и пример кода PHP они дают:Создайте CSV из данных, возвращаемых из API

$apikey = 'YOUR_API_KEY'; 
$list_id = 'YOUR_LIST_ID'; 
$chunk_size = 4096; //in bytes 
$url = 'http://us1.api.mailchimp.com/export/1.0/list?apikey='.$apikey.'&id='.$list_id; 

/** a more robust client can be built using fsockopen **/ 
$handle = @fopen($url,'r'); 
if (!$handle) { 
    echo "failed to access url\n"; 
} else { 
    $i = 0; 
    $header = array(); 
    while (!feof($handle)) { 
    $buffer = fgets($handle, $chunk_size); 
    if (trim($buffer)!=''){ 
     $obj = json_decode($buffer); 
     if ($i==0){ 
     //store the header row 
     $header = $obj; 
     } else { 
     //echo, write to a file, queue a job, etc. 
     echo $header[0].': '.$obj[0]."\n"; 
     } 
     $i++; 
    } 
    } 
    fclose($handle); 
} 

Это хорошо работает для меня, и когда я запускаю этот файл, я в конечном итоге с кучей данных в этом формате:

Email Address: [email protected] 
Email Address: [email protected] 
Email Address: [email protected] 

Я хочу сделать это в CSV (чтобы перейти к месту на моем сервере) вместо echo данных. Есть ли библиотека или простой синтаксис/snippit, который я могу использовать, чтобы это произошло?

ответ

1

Если формат просто нравится:

Email Address, [email protected] 

Email Address, [email protected] 

Email Address, [email protected] 

является то, что вы после этого, то вы можете сделать:

$handle = @fopen($url,'r'); 
 
$csvOutput = ""; 
 
if (!$handle) { 
 
    echo "failed to access url\n"; 
 
} else { 
 
    $i = 0; 
 
    $header = array(); 
 
    while (!feof($handle)) { 
 
    $buffer = fgets($handle, $chunk_size); 
 
    if (trim($buffer)!=''){ 
 
     $obj = json_decode($buffer); 
 
     if ($i==0){ 
 
     //store the header row 
 
     $header = $obj; 
 
     } else { 
 
     //echo, write to a file, queue a job, etc. 
 
     echo $header[0].', '.$obj[0]."\n"; 
 
     $csvOutput .= $header[0].', '.$obj[0]."\n"; 
 
     } 
 
     $i++; 
 
    } 
 
    } 
 
    fclose($handle); 
 
} 
 
$filename = "data".date("m.d.y").".csv"; 
 
file_put_contents($filename, $csvOutput);

переменная $ csvOutput содержит CSV формат.

+0

Это идеальное начало. Благодарю. Можете ли вы порекомендовать библиотеку, которая может взять строку и создать файл CSV? Я охотился и пробовал несколько, но не могу заставить его работать. – jonmrich

+0

Вам не нужна библиотека для записи строки в файл. Попробуйте это: $ filename = "data" .date ("m.d.y"). ". Csv"; file_put_contents ($ filename, $ csvOutput); (См. Последние две строки фрагмента кода) Ссылка на функцию PHP file_put_contents: http://php.net/manual/en/function.file-put-contents.php –

-1

Не обижайтесь, но StackOverflow не предназначен для людей.

Существует около dozen libraries for CSV, но вы можете просто изменить вывод в соответствии с CSV-форматом с использованием массивов и implode.

Также посмотрите here.

1

Это на мне. С этого момента вы, возможно, захотите прочитать какую-то документацию вместо копирования и вставки своего пути через жизнь. другие будут не такими хорошими, как я. вот список функций файловой системы с веб-сайта php. http://php.net/manual/en/ref.filesystem.php Получение вывода файла в желаемый формат csv - это упражнение, оставленное читателю.

$apikey = 'YOUR_API_KEY'; 
$list_id = 'YOUR_LIST_ID'; 
$chunk_size = 4096; //in bytes 
$url = 'http://us1.api.mailchimp.com/export/1.0/list?apikey='.$apikey.'&id='.$list_id; 

/** a more robust client can be built using fsockopen **/ 
$handle = @fopen($url,'r'); 
if (!$handle) { 
    echo "failed to access url\n"; 
} else { 
    $i = 0; 
    $header = array(); 
    $output = ''; //output buffer for the file we are going to write. 
    while (!feof($handle)) { 
     $buffer = fgets($handle, $chunk_size); 
     if (trim($buffer)!=''){ 
      $obj = json_decode($buffer); 
      if ($i==0){ 
      //store the header row 
      $header = $obj; 
      } else { 
       //write data into our output buffer for the file 
       $output .= $header[0].': '.$obj[0]."\n"; 
       } 
      $i++; 
     } 
    } 
    fclose($handle); 
    //now write it to file 
    $path = '/path/to/where/you/want/to/store/file/'; 
    $file_name = 'somefile.csv'; 
    //create a file resource to write to. 
    $fh = fopen($path.$file_name,'w+'); 
    //write to the file 
    fwrite($fh,$output); 
    //close the file 
    fclose($fh); 
} 
+0

Благодарим за предоставление этого. Я на самом деле попробовал несколько вещей, подобных этому, и продолжаю заканчивать пустой CSV, как в случае с вашим кодом. – jonmrich

+0

Это потому, что вы не можете прочитать только часть ввода json и декодировать его. json_decode не создает объект. – Heyflynn

Смежные вопросы