【Django】ニュースアプリ作ってみた

 

こんにちは。のっくん(@yamagablog)です。

 

webアプリを作り始めて3ヶ月の私ですが、3つ目のアプリを作ってみました。

 

「これからwebアプリを作ってみたい」

 

そんな方の参考になればと思います。

 

[toc]

 

作ってみたもの

 

1つ目のアプリは掲示板、二つ目のアプリは画像処理ときたので、三つ目は何するか、、と考えてました。

 

で思いついたのが、「自分の好きなニュースを集めてくれるwebアプリ」。

 

最新ニュースが読めるアプリとかあったら面白そうじゃない?と思って作ってみました。

 

ニュースを集めてくれるアプリ、その名もNewScrapeです。(newsとscrapingをあわせてみました。なんかその辺のアプリと名前被ってそうですね。)

 

 

まぁ、ご覧の通り大したアプリではないのですが、キーワードを打ち込むと色んなサイトから関連した記事を勝手に集めてきてくれます。それでリンクを踏むと実際の記事のページに別タブで飛べます。

 

キーワードは複数指定すると、両方のキーワードに引っかかったニュースを集めます。

 

 

仕組み

 

[speech_bubble type=”ln” subtype=”L1″ icon=”ilust/cat2_1_idea.png” name=”ネコ”]え〜。すごい!!どうなってるの〜??[/speech_bubble]

 

仕組みはシンプルでして、以下のようになっています。

 

 

好きなキーワードを指定すると、Pythonでスクレイピングしてニュースを取ってきてくれます。

 

Djangoを使うメリットってPythonと連携しやすいところだと思ってまして、リストや辞書をそのままテンプレートに渡して表示するってことができるんですよね。

 

Pythonは機械学習やスクレイピングのライブラリが豊富なので、それと連携するwebアプリケーションフレームワークってことでDjangoの需要が高まっていくんじゃないかと思ってます。

 

ちなみにスクレイピングしてニュースをゲットしてくるコードは以下の記事で公開しているので良かったらどうぞ。

 

https://ymgsapo.com/scraping-google-news/

 

苦労した点

 

日本語のURLエンコード

 

検索キーワードからニュース記事を検索するんですけど、キーワードが英語だとそのまま検索出来たんですけど日本語入れると検索できなかったんですよね。その原因調査に数時間かかりました。

 

PythonのFeedParserを使ってるんですけど、日本語のキーワードをURLエンコードしたら解決しました。

 

それまでは、キーワードをutf-8でエンコードしてみたりしました。でもそうすると、バイト列になるのでURL(str)に入れられないじゃんとか思って立ち往生したりして。

 

正直文字コードとか未だによく分かってないので、この辺りは勉強しないといけないなーとか思って調べてみました。

 

URL Standardでは、URLのパス部分の構文解析の際、以下 (path percent-encode set) に該当する文字であれば、UTF-8で符号化のうえパーセントエンコードする旨を規定している (URL Standard 4.4 URL parsing, path state)。パーセントエンコードとは、バイトの並びについて各バイトを「%XX」(XXは十六進法)という文字列への変換である。

wikipedia:パーセントエンコーディング

 

なるほど、utf-8で符号化してさらにパーセントエンコードするんですね。幸いPythonではこの辺りのライブラリも用意されてますので便利ですよ。

 

VPSへのデプロイ

 

アプリを公開するのに、さくらのVPSにデプロイしています。この辺りは慣れるとすぐですが、Linuxの知識がいるので結構つまずく人多いのでは?って思いますね。

 

私も2日間くらいずっと調べて結局出来なかった経験があり苦い思い出です。

 

VPSに設置する方法は以下の記事にまとめてありますので、苦戦してる方はどうぞ。

 

https://ymgsapo.com/deploy-vps/

 

最後に

 

Pythonはシンプルで良い言語です。だけど、PythonでWebアプリを作るときはDjangoの仕組みやHTML、CSS 、Linuxの環境構築など、結構つまずくポイントが多いんじゃないですかね。

 

道のりは長いですが、この辺りをクリアしていくと自分の作った作品(アプリ)をネットで公開してみんなにフィードバックしてもらえるので楽しいですよ。

 

このブログが、みなさんの力になることを祈ってます。

 

それでは。お疲れ様でした。

 

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog