Den3ランキングを自動で作成する。
はじめに
3月くらいまで「Den3ランキング」というものを書いていたんですが、めんどくさくなって色々やっていたら時間がなくてやめていたのですが、それなら時間かけないでできるようにしようかなということで、データから自動でDen3ランキングを作ってもらおうということでやっていきます。
どうやってやるか
まず、データはGoogleAnalyticsから持ってきているので、それの機能であるCSVエクスポートを行ってそれらを読み込み→ランキング作成の流れで行こうと思います。
使うのはPythonです。
プログラム
早速ですが作ったプログラムはこんな感じです。
import pandas as pd
import datetime
import calendar
import urllib.request as req
from bs4 import BeautifulSoup
year = 2020
month = 11
data = pd.read_csv('data.csv', skiprows=6, skipfooter=4 + calendar.monthrange(year, month)[1], engine='python', encoding='utf_8')
data_browser = pd.read_csv('data_browser.csv', skiprows=6, skipfooter=4 + calendar.monthrange(year, month)[1], engine='python', encoding='utf_8')
text = "### Den3ランキングとは?\n\nDen3ランキングとは電子計算機研究会のHP内のブログに関するデータをランキング化して発表しちゃおうというものです。\n\n### 目次(集計期間:1/1~1/31)\n\n<ol>\n <li><a href=\"#access_browser\">アクセスランキング(ブラウザ)</a></li>\n <li><a href=\"#blog_view\">ブログページビュー数ランキング</a></li>\n <li><a href=\"#end\">終わりに</a></li>\n</ol>\n\n\n\n<h3 id=\"access_browser\">アクセスランキング(ブラウザ)</h3>\n\n"
for i in range(data_browser.tail(1).index[0],-1,-1):
text = text + "#### 第" + str(i+1) + "位:" + str(data_browser.ブラウザ[i]) + " (ユーザー数" + str(data_browser.ユーザー[i]) + ")\n\n"
text = text + "<h3 id=\"blog_view\">ブログページビュー数ランキング</h3>\n\n"
for i in range(data.tail(1).index[0],-1,-1):
html = req.urlopen("http://den3.net/" + str(data.ページ[i]))
parse_html = BeautifulSoup(html, "html.parser")
print(parse_html.title.string[:-22])
text = text + "#### 第" + str(i+1) + "位:[" + parse_html.title.string[:-22] + "](" + data.ページ[i] + ")(閲覧数" + str(data.ページビュー数[i]) + ")\n\n"
CSVをPandasで読み込んで、それらを利用して書く感じです。これで、textにDen3ランキングができているので、後はこれをどうにかしてテキストデータとして取り出します。ブログをこれで作って終わりです。ちなみに出力するとこんな感じです。
### Den3ランキングとは?
Den3ランキングとは電子計算機研究会のHP内のブログに関するデータをランキング化して発表しちゃおうというものです。
### 目次(集計期間:1/1~1/31)
<ol>
<li><a href="#access_browser">アクセスランキング(ブラウザ)</a></li>
<li><a href="#blog_view">ブログページビュー数ランキング</a></li>
<li><a href="#end">終わりに</a></li>
</ol>
<h3 id="access_browser">アクセスランキング(ブラウザ)</h3>
#### 第13位:Playstation Vita Browser (ユーザー数1)
#### 第12位:Nintendo 3DS Browser (ユーザー数1)
#### 第11位:Nintendo Browser (ユーザー数2)
#### 第10位:Samsung Internet (ユーザー数6)
#### 第9位:Android Browser (ユーザー数6)
#### 第8位:Opera (ユーザー数7)
#### 第7位:Internet Explorer (ユーザー数9)
#### 第6位:Android Webview (ユーザー数12)
#### 第5位:Safari (in-app) (ユーザー数18)
#### 第4位:Edge (ユーザー数26)
#### 第3位:Firefox (ユーザー数28)
#### 第2位:Chrome (ユーザー数498)
#### 第1位:Safari (ユーザー数550)
<h3 id="blog_view">ブログページビュー数ランキング</h3>
#### 第10位:[プログラミング苦手な人へ](/activity_diary/2020/10/29/1901/)(閲覧数17)
#### 第9位:[君はM.S.S Projectを知っているか](/activity_diary/2020/02/04/211/)(閲覧数20)
#### 第8位:[ハノイの塔をC言語で攻略する](/activity_diary/2020/11/25/2035/)(閲覧数21)
#### 第7位:[WindowsでTeXを使おう!!](/activity_diary/2020/11/01/1964/)(閲覧数21)
#### 第6位:[PythonでPDFファイルを結合するアプリケーションを作った](/activity_diary/2020/04/14/484/)(閲覧数21)
#### 第5位:[ウディタ:画像、アニメーション表示コモン紹介](/activity_diary/2020/11/01/1919/)(閲覧数25)
#### 第4位:[【完全攻略】スーパー英語(E-learning)の効率の良い進め方](/activity_diary/2020/11/04/1974/)(閲覧数33)
#### 第3位:[C++ ゲームライブラリについて](/activity_diary/2020/02/13/233/)(閲覧数40)
#### 第2位:[やろう!NEUTRINO (AIきりたん)](/activity_diary/2020/05/09/753/)(閲覧数58)
#### 第1位:[ポケモン剣盾乱数で6Vメタモンが乱獲したかった。](/activity_diary/2020/01/12/171/)(閲覧数1,119)
マークダウンとhtmlが混じっていますが、これはこのブログがマークダウンで書くことのできるブログだからです。もっとこうしたほうがいいなどあるかもしれませんが、とりあえずこれ以上は面倒なのでこのままでいきます。
最近のブログについて
このブログを始めた時からちょっと懸念で合ったブログの数が少ない問題は今月からブログを1年生は毎月15日まで、2年は月末までというような形でやるというちょっとした取り決めを行ったおかげ(?)で少し解決したような気がします。量より質が大事だからともいえますが、書きなれないのに質だけ求めても意味ないし、たかがサークルのブログに質なんてあってないようなものだと思っているので(いろんな意味で)、結局、最低限の内容があるという前提はありますが量が大事だと思っています。まあ、文章なんて書いてなれると思うので。
ということで、今年のブログの数は30弱で自分がトップで量を書いていましたが(やろうといった人とダブルスコア)、来年は一人12以上のブログを書くことがほとんど確定しているので、より内容のあるような内容が書けたらいいなと思います。もちろん、いろんな勉強をしながら書くので間違いはあったりするとは思いますが。
そんなこんなで、Den3ランキングはまた11月分から再開していこうかなと思います。
コメント入力