エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【PHP】HTMLのclassを指定して要素を取得。DomCrawler【209日目】

こんな時に使う

<div class="aaa">
    <p class="aaa">aaaaa</p>
    <img src="/test/img.png">
</div>

これの、src部分 /test/img.pngが欲しい。

DomCrawler使ってみよう

これ使うと、CSSセレクタ使って取得が出来る。

簡単。見やすい。

■DomCrawler
https://symfony.com/doc/current/components/dom_crawler.html

テスト用コード

(Laravelでphp artisan tinkerとかしていただければ試せます)

use Symfony\Component\DomCrawler\Crawler;

$html = <<< EOF
<div class="aaa">
<p class="aaa">aaaaa</p>
<img src="/test/img.png">
</div>
EOF;

$crawler = new Crawler($html);
$srcs = $crawler->filter('.aaa img')->each(function (Crawler $c) {
return $c->attr('src');
});

結果

=> [
"/test/img.png",
]

【Laravel】url()->previous()で前のページが取得出来ない時の対応【208日目】

直前に見ていたページの取得方法はこちら

willow710kut.hatenablog.com

こんな時につかう

  1. 対象のページを初めて見た時
  2. 新しいページ、新しいタブで開いた時

この時は、直前に見ていたページが取得出来ない。
その時の対応をどうするか。

別なページをセットする

url()->previous('/error');

これで、取得出来なかった場合には、/errorのURLをセットすることが出来る。

引数ない場合何が起こるの?

元コード。

    public function previous($fallback = false)
    {
        $referrer = $this->request->headers->get('referer');

        $url = $referrer ? $this->to($referrer) : $this->getPreviousUrlFromSession();
        
        if ($url) {
            return $url;
        } elseif ($fallback) {
            return $this->to($fallback);
        } else {
            return $this->to('/');
        }
    }

つまり、取得出来なかった時には、引数のURLをセットする。

引数がなかった時には、ドメインのTOPに飛ばされる。

slackで書いた書き込みを、GASで読み込ませる【207日目】

手順

  1. slackにアプリを入れる
  2. アプリの設定する
  3. GASのdoPostで受け取る

slackにアプリを入れる

  1. slackをカスタマイズを開く
  2. メニューからApp管理を選ぶ
  3. 画面上のApp検索で『webhook』とかで検索して、発信Webフックを追加する

アプリの設定する

  1. 設定を追加を選ぶ
  2. 『引き金となる言葉』 を設定
  3. URLにGASのURLを追加 (GASで公開→ウェブアプリケーションとして導入で出るURL)
  4. 設定を保存

f:id:willow710kut:20180508205149p:plain

GASのdoPostで受け取る

GASはdoPostという関数を書くとPostでアクセスした時に動く関数が作れるよ。

function doPost(e) {
  word = e.parameter.text ;
}

これで受け取れるよ。

引き金となる言葉が含まれているから、replace関数とかで削るといいよ。

【PHP】表示させたページに404のステータスコードをつける【206日目】

こんな時に使う

PHPでオリジナルの404ページを表示させたい。

で、ページが例外に入った時にオリジナルの画面を表示させたけど、
ステータスコードが200で正常に表示されている時。

このコード付け足す

header("HTTP/1.1 404 Not Found");

これでステータスコードが404になっています。

google chromeのNetworkの項目とかで確認してみましょう。

【Laravel】実行したor実行する前のSQL文を確認する【205日目】

こんな時に使う

Laravelで書いたSQLの文を確認したい。

$articles = Article::all();

これとか実際にはどんなSQL文で取得したか知りたい

実行後に確認

// これから書くSQL文をLogで取得出来るようにする
\DB::enableQueryLog();

// SQL文実行
$articles = Article::where('id', 1)->get();

// getQueryLogでLogを取得する
dd(\DB::getQueryLog());

実行前に確認

// getをする前のデータ
$articles_sql = Article::where('id', 1);

// SQL文を取得
dd($articles->toSql());

【GAS】キー等、定数をコードに含めたくない時【204日目】

こんな時使いたい

コードに、アクセスのときのキーとかを含むとき、こう書きたくない

key = 'xxxxxxxxxxxxxxxxx';

これをコードに含みたくない時とか。

準備

  1. ファイル→プロジェクトのプロパティ
  2. 開いたモーダルから、スクリプトのプロパティ
  3. 行を追加をクリック
  4. プロパティ(キー名)と、値を入力
  5. 保存!

簡単!

使う

PropertiesService.getScriptProperties().getProperty("MY_KEY");

ちなみに、これで新しくプロパティをセットすることも可能

PropertiesService.getScriptProperties().setProperty("OTHER_KEY");

【日記・思考】余裕が無いときに『出来ること』は実は不幸なのか?【203日目】

出来ると成長を止める?

『30分でとあるプログラムを作れるAさん』がいたとする。
その人は30分で毎回プログラムを作れるでしょう。

『1時間でとあるプログラムを作れるBさん』がいたとする。
その人はどうにかして、Aさんみたく、30分でプログラムを作ろうとした。

頑張るだけじゃダメだった。Bさんはいっぱい工夫して効率を高めた。
結果、Bさんは『20分でとあるプログラムを作れるBさん』になれました。

忙しくて、とにかく手が回らない時ありませんか

とにかく忙しい、今頑張るしかないと頑張っている人はいませんか。

その人はきっと優秀で、『30分でとあるプログラムを作れるAさん』
なのかもしれません。

でも、その人になんとかして余裕を作ることが出来たら、
『15分でとあるプログラムを作れるAさん』になるかもしれません。

でも、きっと忙しすぎて『30分でとあるプログラムを作れるAさん』でないと、
仕事が間に合わないのかもしれません。

弱いロボットから学ぶこと

最近、『弱いロボット』というものが話題になりました。

ロボットがゴミを見つけるのです。
でも、そのロボットはゴミを拾う機能がありません。

だからあたふたするしかないのです。
あたふたしているのを周りに知らせるのです。

すると、周りの人がゴミを拾って、ロボットに渡してくれるのです。

『最初からロボットにゴミを拾う機能をつければいいじゃん』と思うか
『そんな効果、出来事を生み出せる素晴らしいロボットだ』と思うかは
人次第だと思います。

ただ、あなたになにかが不足している時、あなたにはチャンスがあるのです。

私はいっぱい足りない人間だけど、だからこそ考えられることもあるのかも知れない。

私がやりたいこと。

『30分でとあるプログラムを作れるAさん』を、
『15分でとあるプログラムを作れるAさん』にしたいです。

だから、そのために出来ることをやりたい。やれることを探したいです。

みなさんの周りには、忙しすぎて『30分でとあるプログラムを作れるAさん』のままの人はいませんか

きっと何かしらの形で余裕をもたせれば、
『15分でとあるプログラムを作れるAさん』になるかもしれないですし、
もっと生産性の高い何かを生み出してくれるかもしれないです。

【GAS】スプレッドシート取得後の二重配列で、空の配列を消す関数を作る【202日目】

GASでスプレッドシート読み込むと二重配列が来る

sheet.getRange('A:A');

こんな感じにA列を取得すると、

 [[:ゆるふわ:], [ゆるふわ], [進捗どうですか?], [大好きだよっ], [にゃ〜], [今日も君は素敵だよっ], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], []]

とかなって、空の配列が混ざるのが非常に面倒。

[[:ゆるふわ:], [ゆるふわ], [進捗どうですか?], [大好きだよっ], [にゃ〜], [今日も君は素敵だよっ]]

こうなってほしい

こんな関数作る

function dropNullItemFromArray(array)
{
  var new_array = [];
  for each (var value in array) {
    if(value != null && value != "") {
      new_array.push(value);
    }
  }
  return new_array;
}

(本当はdropしてない)

のは置いておいて。これで空の配列をなくした配列が出来上がりました。