PHPプログラミングにチャレンジ-Chatworkログ取得プログラム(改良版)

先日作成したChatworkログ取得プログラムですが、こちらのプログラムだと1つのチャットのログしか取れません。今回は「たくさんあるグループチャットのログをとる」ことが求められているため、自分が所属している全てのグループチャットのログをとるように改良してみました。

 

目次

1. 自分が所属しているグループチャットの一覧を取得

まず、自分が所属しているグループチャットの一覧(room ID)を取得するプログラムです。
 

<?php

//取得したAPIトークンを入れる
$apiKey = "{APIトークン}";

// ヘッダ
header("Content-type: text/html; charset=utf-8");

// cURLでPOST
$ch = curl_init();

// cURLのオプション設定 {roomId}の箇所には取得したルームIDを入れる
curl_setopt($ch, CURLOPT_URL, "https://api.chatwork.com/v2/rooms");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-ChatWorkToken: '. $apiKey));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);		// 結果を文字列で返す
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);	// サーバー証明書の検証を行わない

$rsp = curl_exec($ch);
curl_close($ch);

// 結果をコンソールに出力
$res = json_decode($rsp, true);

//room_idを配列にいれる
$room_id = array_column($res, 'room_id');

//room_idだけをファイルに書き込む
$file = fopen("room_id.txt", "w");
foreach ($room_id as $key => $val ) {
     fwrite($file, $val."\n");
}
fclose($file);

 
このプログラムを実行すると、「room_id.txt」というファイルが生成されます。
「room_id.txt」にはroom IDの一覧が書き込まれています。

 

2. roomIDを読み込みながらログを取得する

続いて、先ほどのプログラムで出力した「room_id.txt」を読み込みながら、チャットのログを取得するプログラムです。
「room_id.txt」を読み込みながら、配列に値を入れてループさせています。

<?php

//取得したAPIトークンを入れる
$apiKey = "{APIトークン}";

//room_idが出力されているファイル名
$filename = 'room_id.txt';

// ファイルを配列に格納し、さらに変数に格納
$roomid = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

//全てのroomidのログを取得
for ($i = 0 ; $i < count($roomid); $i++){

	// ヘッダ
	header("Content-type: text/html; charset=utf-8");

	// cURLでPOST
	$ch = curl_init();

	// cURLのオプション設定 {roomId}の箇所には取得したルームIDを入れる
	curl_setopt($ch, CURLOPT_URL, 'https://api.chatwork.com/v2/rooms/'.$roomid[$i].'/messages?force=0');
	curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-ChatWorkToken: '. $apiKey));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);		// 結果を文字列で返す
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);	// サーバー証明書の検証を行わない

	$rsp = curl_exec($ch);
	curl_close($ch);

	if (!empty($rsp)) {
		// 結果をコンソールに出力
		$res = json_decode($rsp);
		$res2 = json_encode($res, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
		var_export($res2);

		// 結果をファイルに出力
		ob_start();
		var_export($res2."\n");
		$data = ob_get_clean();
		$fp = fopen('chatlog_'.$roomid[$i].'.json', "a");
		fwrite($fp, $data);
		fclose($fp);
	}
}

 
ループの処理を追加しただけで、それ以外は前回の内容をそのまま使っています。
 

3. 子ども向けプログラミングの知識は役にたったか?

今回は配列を使ってループ処理を行いました。
 
PHPの配列は、Scratchでは変数の「リスト」。
PHPのループは、Scratchでは「繰り返す」でおなじみですね。

 
やはりこの辺りのイメージを持っていたことが、「改良してみよう」とアイデアを思いつくきっかけになっています。Scratchは本格的なプログラミングをする上で役に立っていると思います。

この記事を書いた人

目次