mamori017.log

歴史的クソブログ

simplexml_load_fileでRSSから最新エントリの情報を取得する

このブログの最新記事の更新日とタイトルを抜き出してハイパーリンクを作成したかったので、 PHPのsimplexml_load_fileを使用してRSSをパースしました。

PHP: simplexml_load_file - Manual

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>hoge</title>
</head>
<body>
<?php
    $rss = simplexml_load_file('http://mamori017.hatenablog.com/rss');
    foreach($rss->channel->item as $item){
        // 記事タイトル
        $title = $item->title;
        // 更新日付
        $date = date("Y/n/j", strtotime($item->pubDate));
        // 記事URL
        $link = $item->link;
?>
        <!-- 画面に表示する内容 -->
        <span>
            <?php echo $date; ?>
        </span>
        <span>
            <a href="<?php echo $link; ?>" target="_blank">
                <?php echo $title; ?>
            </a>
        </span>
<?php
        // 最初の1件だけ取得するのでここで終了する
        return;
    } 
?>
</body>
</html>

表示結果。 f:id:mamori017:20171227111516p:plain

初めてのPHP

初めてのPHP

Google Home MiniとIFTTTを使ってツイートしてみた

f:id:mamori017:20171206224119j:plain Google Home Miniを買ったので、IFTTTを使って喋った内容がツイートできるようにしました。

いつものように「OK、Google」でGoogle Assistantを呼び出し、 「ツイート」と言ったあとに続く言葉をツイートしてもらうように設定してみました。 言語は日本語を設定しているのですが、トリガーになる発言が「ツイート」だけでは失敗しそうな気がしたので「Tweet」をオプションに追加しています。*1

f:id:mamori017:20171206230711p:plain

完成したアプレット

f:id:mamori017:20171206230759p:plain

試しに「Google Homeからテスト」と言ってみたところちゃんとツイートされていました。

滑舌の問題が大きいと思うのですが、あまりに長い言葉だと誤認識される確率が高いのと、 IFTTTの設定で、発言後のGoogle Assistantからのレスポンスを日本語で記述するとツイートされない*2みたいです。

*1:意味があるのかは分かりませんが…

*2:今のところ100%失敗する。

NULLは比較演算子では検索できない

NULLに対して検索を行いたい場合はIS (NOT) NULLを使用しなければいけません。 NULLは通常の値とは異なる*1ので、NULLに対して比較演算子("="や"<>")を使用しても結果に反映されません。

ColumnA ColumnB
100 100
200 NULL
300 300
400 400

上記のテーブルに対して以下のクエリを実行した場合、2行目のレコードが該当するので検索結果は1件で返ってきます。

SELECT *
FROM Table
WHERE ColumnB IS NULL

しかし、NULLに対して比較演算子を使用した以下のクエリを実行した場合、2行目のレコードは出力されず検索結果は0件で返ってきます。

SELECT *
FROM Table
WHERE ColumnB = NULL

これはIN演算子なども同様で、NULLを検索対象に含んだとしても検索結果として返ってきません。 IN演算子でNULLを含めたい場合はNULLを除外した条件句にIS NULL条件を追記して対応する必要があります。

SELECT * 
FROM Table 
WHERE (ColumnB IN (100,400) OR ColumnB IS NULL) 

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

*1:SQL Server Management Studioの[テーブルを編集]で表示される斜体のNULLは文字列ではありません。