PHPでCSVをダウンロードする方法
hebishima.shogo
プログラマーのあれこれ
はい、hebiです。
Mattermostへメッセージを送信する記事に引き続き、メッセージとファイルを送信する方法を記事にしました。
メッセージだけではなく、ファイルを送信したい需要も多くあると思いますので是非参考にしてみてください。
具体的な例として、朝一に前日の売り上げ情報をCSVで送信したり、データを整えたPDFを送信したりなどで利用できます。
メッセージの送信方法やPDFの作成方法を以下の記事をどうぞ(^_-)-☆
ファイルを送信するためにsendFiles関数を実装します。
public function sendFiles($message, $files)
{
$mattermostUrl = "http://43.207.160.244:8065";
$apiToken = "9bb4owrd4t8dxcs5aooo4ezhrw";
$channelId = "4cki6gqt3fg1pepfzc86be8qaa";
$headers = [
"Authorization: Bearer $apiToken"
];
$fileIds = array();
foreach ($files as $file) {
$mime_type = mime_content_type($file);
$fileName = end(explode('/', rtrim($file, '/')));
// ファイルをHTTP POSTリクエストで送信するためにCURLFileへ変換
$curlFile = new CURLFile($file, $mime_type, $fileName);
$option = [
'channel_id' => $channelId,
'files' => $curlFile
];
$ch = curl_init( "$mattermostUrl/api/v4/files");
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $option);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// ファイルをアップロード
$response = curl_exec($ch);
curl_close($ch);
// アップロードしたファイルIDを取得して$fileIds配列に保持
$obj = json_decode($response, true);
$fileIds[] = $obj['file_infos'][0]['id'];
}
$url = "$mattermostUrl/api/v4/posts";
$data = [
'channel_id' => $channelId,
'message' => $message,
'file_ids' => $fileIds, // 保持したファイルIDを指定しないとファイルは表示されない
];
// cURLセッションの初期化
$ch = curl_init($url);
// cURLオプションの設定
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer $apiToken",
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
// cURLリクエストの実行
$response = curl_exec($ch);
// HTTPステータスコードの取得
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// cURLセッションのクローズ
curl_close($ch);
// レスポンスの確認
if ($httpCode == 201) {
return true;
} else {
return false;
}
}
作成したsendFilesをcronのrunで呼び出します。
public function run(array $params)
{
// 生成したファイルのパスを配列に指定して渡す
$files = array(WRITEPATH . 'test1.txt', WRITEPATH . 'test2.txt');
if ($this->sendFiles('ファイル送信テスト', $files)){
CLI::write('successfully.', 'green');
}else{
CLI::error('error');
}
}
Tera Termからcommand:testを実行してみます!
sudo php spark command:test
成功することを確認!
test1.txtとtest2.txtが指定したチャンネルに送信されました!!
ファイル送信を行うことができましたね!
これで自動的にファイルを送信し共有することができます。
ぜひ、今まで手動で行っていたことを自動化していきましょう!
最後までお読みいただきありがとうございました(^^♪