信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    LINE Notify APIを試してみました

    初めまして。1月からお世話になっておりますJGです。最近LINE Notify APIを使い、毎朝自分のLINEに通知させました。それについて触れたいと思います。下記URLからLineIDでログインし、必要事項を入力します。その後、アクセストークン発行をクリックし、発行されたトークンをコピーして保存してください。https://notify-bot.line.me/ja/天気予報を取得する処理は下記のlivedoorを使用しました。http://weather.livedoor.com/weather_hacks/webservicePHPで処理を書き、作成したものをHerokuに上げ、毎朝通知するようにHerokuのスケジューラを設定しました。下記ソースのTOKENに、LINEのアクセストークンを指定すれば動きます。自分の住んでいる東京と出身地の神奈川の天気を通知するために、$city_listを下記のように指定しています。興味がある方は、是非試してみてください。<?php define('TOKEN', ''); define('MESSAGE_NOTIFY_API_URL', 'https://notify-api.line.me/api/notify'); define('WEATHER_API_URL', 'http://weather.livedoor.com/forecast/webservice/json/v1?city='); $city_list = [   130010,   140010,   140020 ]; foreach ($city_list as $city) {   //天気予報を取得   $weather_data = get_weather_data($city);   if (empty($weather_data)) {     $msg = "天気予報取得失敗です。";   } else {     //通知メッセージを作成     $msg = create_message($weather_data);   }   //通知   send_msg($msg); }   function get_weather_data($city) {   $ch = curl_init();   curl_setopt($ch, CURLOPT_URL, WEATHER_API_URL.$city);   curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   $response = curl_exec($ch);   $http_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);   if ($http_code != 200) {     return false;   }   if (curl_error($ch)) {     return false;   }   $weather_data = json_decode($response, true);   curl_close($ch);   return $weather_data; } function create_message($arr) {   $msg = '';   $title = $arr['title'] ?? '';   $msg .= $title."\n\n";   for ($i = 0; $i < 2; $i++) {     $date = $arr['forecasts'][$i]['date'] ?? '';     $date_label = $arr['forecasts'][$i]['dateLabel'] ?? '';     $weather = $arr['forecasts'][$i]['image']['title'] ?? '';     $min = $arr['forecasts'][$i]['temperature']['min']['celsius'] ?? '';     $max = $arr['forecasts'][$i]['temperature']['max']['celsius'] ?? '';     $msg .= $date_label.'('.$date.')'."\n";     $msg .= '天気: '.$weather."\n";     $msg .= '最高気温: '.$max."\n";     $msg .= '最低気温: '.$min;     if ($i < 1) {       $msg .= "\n\n";     }   }   return $msg; } function send_msg($msg) {   $post_data = http_build_query(['message' => $msg]);   $ch = curl_init(MESSAGE_NOTIFY_API_URL);   curl_setopt($ch, CURLOPT_POST, true);   curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);   curl_setopt($ch, CURLOPT_HTTPHEADER, [     'Content-Type: application/x-www-form-urlencoded',     'Authorization: Bearer '.TOKEN,     'Content-Length: '.strlen($post_data)   ]);   curl_exec($ch);   $http_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);   if ($http_code != 200) {     return false;   }   if (curl_error($ch)) {     return false;   }   curl_close($ch);   return true; }
  • テクログ

    RESTAPIの社内勉強会

    つい昨日RESTAPIの勉強会があり参加しました!チャットボット導入の際に開発したとのことで導入の際に注意したことや必要になったことなど実際の業務で使ったポイントだったので具体的で分かりやすかったです。RESTの発表会とのことでしたが個人的には認証まわりの話がかなりためになりました。アクセストークンを使用した認証についてもある程度理解が深まったし業務時間中の勉強会だったのでいい息抜きになったしでかなり有意義な勉強会だったと思います!発表者の方ありがとうございますSPAなども増えてるのでWEBサイト開発でもRESTAPIの知識は必要になりますね個人的にも勉強するようにします!クライアント側の話もあったらまた勉強会参加したいです
  • テクログ

    cURLのメモリリーク

    こんにちは、kaiです。最近新作ゲームをプレイ中に自宅PCのメモリ使用率が95%まで上がったことがあって(windows defenderの問題でした)、メモリリークって怖いな…と思う今日この頃ですが、それに関連して今回は担当していた案件で遭遇した問題について紹介します。取得したURLにPHPのcURL関数を用いてアクセスするプログラムを作成したところ、実行中、時間を追うごとにサーバーのメモリ消費量が増大していく現象が発生しました。プログラム側ではスタックし続けるような処理を実装していないので、調査したところ、curlの古いバージョンにはキャッシュを蓄積し続けるバグが存在しておりプログラム実行中にはメモリが解放されずに消費されていくことが分かりました。そこで暫定の対応ではありますが、curl利用部分を個別のプログラムとして切り出し、そこにURLを分割して渡すことでメモリ消費を抑える形に改修しました。追々バージョンアップや別の方法に変えたいところですね…まだ記事作成時点でテスト中ですが、結果や追加対応などはまた報告できればと。外部要因の不具合はなかなか出くわさなかったので個人的には良い経験になったと思います。ではまた。・参考URLhttps://qiita.com/digitalpeak/items/4b39fdcb8fae7d09f406https://blog.eviry.com/entry/2019/07/23/160715_1
  • 画像:ブログサムネイル

    テクログ

    NetBeansを使ってのちょっとした便利機能

    お久しぶりです。まーくんです。複数のプロジェクトファイルを同時並行で開いていると、どのファイルがどのプロジェクトのかわからなくなることありませんか。まーくんは最近ありました。その時に便利なNetBeansの便利な機能があったので紹介します。▼デフォルトの状態だとこんな感じの横一列(別々のプロジェクトで1ファイルを開いている状態)▼便利な機能を使うとこんな感じでそれぞれのプロジェクトごとに複数行でファイルがわかれてくる。やり方はツールタブ→オプションのモーダルを開く→外観選択→複数行タブにチャック→1プロジェクトにチェック→ついでに同じプロジェクトのファイルと同じ背景色を選択をするだけ。これだけでとてもみやすくなるので、ぜひ試してみてください。
  • テクログ

    FuelPHPでのクーロンログ

    FuelでのログはView側では、大本(言い方)try {} catch () {}でくくられているため、基本全てのエラーが吐き出されるようになっています。そして、タスク(cron)実行する際にもログが出てほしいな~と思い、調べた結果です。タスクの場合Fuelの本体とは別のロジックとなっており、ログに吐き出すようにするには、コーダーさんが処理内にtry {} catch () {}などでくくらなければエラーを明示的に吐き出すことができませんでした。(なぜ・・・)参考サイトとしてリンクを貼りますが(https://qiita.com/notona/items/b821ed0ad04ac3ef8f80)以下のようなことが書かれておりました~~~~~php7 では一部のエラーが Error例外 として throw されるようになりました。そのため Error と ErrorException がどちらも実装しているインターフェースになっている Throwable でキャッチする~~~~~ざっくりいうと、エラーを拾う(出力させる)ためには、タスク処理をごっそりと「try {} catch (\Throwable $e) {}」でくくる必要がある。もしくは、エラー出力としcronに設定する際に0 0 1 * * [php path] [oil path] refine [task name] 2>> [output file name]`date +\%Y\%m\%d`.logのように、cronを設定する必要がある(この場合は try {} catch () {}の必要はない)ただ、oil深くまで潜ると。。。。ありました!!エラー時には、コンソールに表示させる記述が。こいつを、オーバライドして、ログに吐き出されるようにすれば、タスクが実行されて、try {} catch () {}でくくらなくても、うまくいく(はず)※やって見る方は自己責任でお願いします。
  • テクログ

    スプレッド演算子

    スプレッド演算子(可変長引数)【...】←この三点リーダーみたいなやつのこと読んで字のごとくですが、関数に渡す引数を任意の個数渡すことが出来ます。悩んでたんです、既に用意されている(実態がない)関数の引数が可変長だったのです。。。それをどのようにすれば、可変で引数を渡せるのか。その時に出会いました!!使用する機会が最近ありましたので、簡単な例を載せてご紹介いたします!<?php // [...]引数が過変数で受け取ることが可能 public function my_method (int ...$nums) {   // init   $sum = 0;   foreach ($nums as $num)   {     $sum += $num;   }   return $sum; } my_method(1,2,3,4,5);  // output = 15(引数が5つ) my_method(10,20,30);   // output = 60(引数が3つ) ...のように引数の数を可変で渡せる これは、かなり便利!!そうそう使う機会は多くはないとは思いますが、是非!「ここだ!」と思うタイミングで使ってみては?それでは、これにてm(_ _)m