BETA

いらすとや警察

投稿日:2020-07-25
最終更新:2020-07-25

はじめに

自身のモチベーション維持のためはじめました。定期的に何か書けたらいいなあと思っています。

経緯

初めてqrunchで何か書こうと思ったがネタも技術もない
→せめて何か自分で面白いと思えるものを作ろう
→いらすとやをふんだんに使ったスライドを社内でよく見る
→いらすとや警察になるか(今)

やったこと

いらすとや警察CLIを作成しました。
簡潔に何をしているのかを下記に書きます。

  • いらすとやの商用利用可能な素材数を超過した際に警告の文章が流れる
    • いらすとやの判別にはスクレイピングによって収集した値を使用(後述)
    • python-pptxを使用したスライドの処理

スクレイピング

今回の前提として、ユーザは以下のいずれかによってスライド内にいらすとやの画像を使用していると仮定しています。

  • いらすとやのページからスライドへ直接ドラッグ&ドロップを行った
  • いらすとやのページからダウンロードした素材をスライドに挿入した

そのため今回は画像を取得せず、いらすとやページ内に掲載されている画像の「タイトル」と「表示されている画像の名前」を取得した上で、スライド内の画像の名称と照らし合わせる処理を行います。
肝心のスクレイピング処理については下記の手順で行いました。実装している内容はBeautifulSoupを用いた簡素なスクレイピングですので、本記事にコードを掲載するのは割愛します。(コードもまだ汚く...)

  1. いらすとやのサイトマップより、スクレイピングで探索しても良いとされるリンクにアクセス
  2. 各々の素材ページからタイトルと画像名を取得、リスト化したものをpickleとして保存

おそらくこの手順であれば何らかの侵害を発生させていることはないかと思いますが、もし何かご指摘あればいただけると非常に助かります。(最低限のスクレイピング紳士でもあるはずなので...)

いらすとやの判別

前項でも説明した通り、いらすとやの画像を判別するトリガーは「タイトル」か「画像名」が一致しているかという点です。ダウンロード後名称を変更すること等には対応できない無能っぷりではありますが、サイトマップ上に掲載されている素材は網羅することができます。
判別のコードは非常に簡素で、スライドから取得した画像名とスクレイピングされた画像名あるいはタイトルと一致するかを検出するだけ。

for slide in ppt_file.slides:  
    for shape in slide.shapes:  
        if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:  
            ppt_img_name = shape._pic.nvPicPr.cNvPr.get('descr')  
            if (ppt_img_name in irstya_title_list) or (ppt_img_name in irstya_img_list):  
                irasutoya_count += 1  

さいごに

自分で面白いと思って作ってみましたが、まだまだ使い勝手も悪く改良の余地はあるなと感じています。(最新版に対応するには毎回手動でリストを更新して保存しなければならないところなど。そもそもコードが汚いという問題)
こうした方が良いなどのアドバイスあれば何でもお待ちしています。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@wvCilzWho1fJJlgZの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう