« DreamPie 1.2.1でカーソルが出ない。タブが真っ白。解決。 | トップページ | スタイリッシュで高機能になったTiddlyWiki5の使い方。 »

2013年11月26日 (火)

ココログのアクセス解析ログのダウンロードお助けアプリ作ってみた。

公式の方でアナウンスがありましたが、12月3日から新しいアクセス解析が導入されるということですが、注意したいのは

現在のアクセス解析のデータは新アクセス解析には引き継がれません。

ということで、ダウンロード期間中の2013年11月18日~2014年2月28日の間に現在のアクセス解析のログをダウンロードしておかないと見れなくなってしまう訳です。

ログはエクセルファイルで「アクセス推移」、「ページ別アクセス数」、「リンク元ページ」、「検索サイト」、「検索ワード」、「検索フレーズ」の各ページがあって詳しく充実してるのでダウンロードおすすめです。私の場合、これで2009年から現在までのログが一分くらいでダウンロード出来ました。眺めるみると、ブログ初めたばかりの時はアクセス数10を切っていた日がザラ。二桁が当たり前になるまでに3ヶ月。アクセス数平均100を超えるまで一年以上。rain

だたし、ひと月ごとのダウンロードになるので、長くブログをやっているとなかなか全部ダウンロードするのが大変です。

そこで、Pythonでちょっとしたスクリプトを書いて見ました。また、調子に乗ってPythonがインストールされてなくとも使えるようにグラフィカルインターフェイス版を実行ファイルとしてパッケージ化してみました。

ココログアクセス解析自動ダウンロードスクリプトの使い方。

Pythonの2.7で書いています。Python2.7をインストールする必要があります。

レジストリを汚したくない人はPortable Pythonという手もあります。ただし、NumPy, SciPy, Matplotlib, PyWin32, Django, PIL, wxPython, PyQt, PyGameなどがついてくるのでダウンロードサイズが大きめなので、普通に公式のPython 2.7.6 Windows Installer公式サイトからダウンロードするのがおすすめです。

「dl.py」をダウンロード

Pythonのインストールが終わったら、下のスクリプトをテキストエディターにはっつけるか、上のリンクからダウンロードして、最後の方のtextとurlの変数をココログの管理者ページのアクセス解析のページ(http://app.f.cocolog-nifty.com/t/app/control/stats)をリロードしてからソースコードを見て、変更します。リロードは最新のセッション情報をスクリプトに渡してやるために重要です。

アクセス解析のページにいって、「ブログ/マイフォトを選択」のところで自分のブログを選んでから、ページを右クリックして、ウェブページのソースコードを表示します。

Access_3

ソースの174行目にtdダグで囲まれた沢山のselectダグのある行があると思います。これがtextに渡す文字列になるので、一行全部コピペしてください。この情報からダウンロードする年・月の情報を抜き取っています。次に、urlにはソースの156行目にあるlocation.hrefのダブルクォーテーションで囲まれた内容をコピペしてください。

最後にダウンロード先のフォルダをdestinatioin変数に指定します。フォルダが存在しないとエラーになりますので、先にフォルダを制作してください。この時、スラッシュの数に気をつけてください。例えば、C:\Users\hennohito\Dropbox\access_logというフォルダに保存する場合 destinatioin=r'C:\Users\hennohito\Dropbox\access_log'としてrをクォートの前に付けるか、destinatioin='C:\\Users\\hennohito\\Dropbox\\access_log'としてスラッシュを2つ書いてください。

完成した内容をdl.pyとして保存します。実行するには色々なやり方がありますが、簡単なのはC:\Python27からpython.exeというファイルを見つけます。このファイルにさっき保存したdl.pyをドラッグしてやれば実行出来ます。

バージョンアップのお知らせ。いくつかのファイルがうまく開けないエラーがありました。解決策として、サーバーに負荷かけないように、10秒のウェイトを入れておきました。それから、範囲でも指定したり、エラーになった月だけ手作業で指定するオプションもつけました。ifやelifのあとの数字を0から1にするとオプションのオン・オフができます。0でオフ、0位外はオンです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#  dl.py
#  
#  Copyright 2013  <http://hennohito.cocolog-nifty.com/>
#  
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#  
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#  
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#  MA 02110-1301, USA.
#  
#  
import multiprocessing, os, Queue, time, urllib2 # standard library

def DL(YearMonth, url, destinatioin):
    fp = os.path.join(destinatioin, YearMonth+'.xls')
    f = urllib2.urlopen(url + YearMonth)
    with open(fp, 'wb') as xls:
        xls.write(f.read())


class Worker(multiprocessing.Process):
    ''' http://jeetworks.org/node/81 
        modified from the 2nd example in the comments '''

    def __init__(self, work_queue, url, destinatioin):

        # base class initialization
        multiprocessing.Process.__init__(self)

        # job management stuff
        self.work_queue = work_queue
        self.kill_received = False

        self.url = url
        self.destinatioin = destinatioin

    def run(self):
        while not self.kill_received:

            # get a task
            try:
                n_job, YearMonth = self.work_queue.get_nowait()
            except Queue.Empty:
                break

            # the actual processing
            print("Starting " + str(n_job+1) + " ... " + YearMonth)
            DL(YearMonth, self.url, self.destinatioin)
            time.sleep(10)


if __name__ == '__main__':
    work_queue = multiprocessing.Queue()

    if 1:
        # 年月指定オプション1 ソースから全部抜き取る
        # ソースの174行目 http://app.f.cocolog-nifty.com/t/app/control/stats
        text = '<td><select name="dl_ym" id="dl_ym"><option value="201310">2013年10月</option><option value="201309">2013年09月</option><option value="201308">2013年08月</option><option value="201307">2013年07月</option><option value="201306">2013年06月</option><option value="201305">2013年05月</option><option value="201304">2013年04月</option><option value="201303">2013年03月</option><option value="201302">2013年02月</option><option value="201301">2013年01月</option><option value="201212">2012年12月</option><option value="201211">2012年11月</option><option value="201210">2012年10月</option><option value="201209">2012年09月</option><option value="201208">2012年08月</option><option value="201207">2012年07月</option><option value="201206">2012年06月</option><option value="201205">2012年05月</option><option value="201204">2012年04月</option><option value="201203">2012年03月</option><option value="201202">2012年02月</option><option value="201201">2012年01月</option><option value="201112">2011年12月</option><option value="201111">2011年11月</option><option value="201110">2011年10月</option><option value="201109">2011年09月</option><option value="201108">2011年08月</option><option value="201107">2011年07月</option><option value="201106">2011年06月</option><option value="201105">2011年05月</option><option value="201104">2011年04月</option><option value="201103">2011年03月</option><option value="201102">2011年02月</option><option value="201101">2011年01月</option><option value="201012">2010年12月</option><option value="201011">2010年11月</option><option value="201010">2010年10月</option><option value="201009">2010年09月</option><option value="201008">2010年08月</option><option value="201007">2010年07月</option><option value="201006">2010年06月</option><option value="201005">2010年05月</option><option value="201004">2010年04月</option><option value="201003">2010年03月</option><option value="201002">2010年02月</option><option value="201001">2010年01月</option><option value="200912">2009年12月</option><option value="200911">2009年11月</option><option value="200910">2009年10月</option><option value="200909">2009年09月</option><option value="200908">2009年08月</option><option value="200907">2009年07月</option><option value="200906">2009年06月</option><option value="200905">2009年05月</option><option value="200904">2009年04月</option><option value="200903">2009年03月</option><option value="200902">2009年02月</option></select></td>'
        YearMonths = [_[2:8] for _ in text.split('value')[1:]]
    elif 0:    # 年月指定オプション2 ほしい範囲で指定
        StartYM, EndYM = '200902', '200904'
        StartY, EndY = int(StartYM[:4]), int(EndYM[:4])
        StartM, EndM = int(StartYM[4:]), int(EndYM[4:])
        YearMonths = []
        for Y in (range(EndY-StartY+1)):
            if Y == 0:
                _StartM = StartM
            else:
                _StartM = 1
            if Y == EndY-StartY:
                _EndM = EndM+1
            else:
                _EndM = 12+1
            for M in range(_StartM, _EndM):
                print "%d%02d" % (StartY + Y, M)
                YearMonths.append( "%d%02d" % (StartY+Y, M) )
    elif 0:   # 年月指定オプション3 エラーになったのものだけ手作業で。
        YearMonths = ['200903', '200905' ]

    for n, YearMonth in enumerate(YearMonths):
        work_queue.put( (n, YearMonth) )
    print "Total %d jobs found" % (n+1)

    # ソースの156行目 http://app.f.cocolog-nifty.com/t/app/control/stats
    url = "http://ax24.a.cocolog-nifty.com/bin/dl?ud=xxxxx.cocolog-nifty.com&bid=bxxxxxxxx&sk=xxxxxxxxxxxxxxxxxxxxxxxx&ym="
    destinatioin = r"C:\access_log" # 存在するフォルダのみ指定可能。
    for _ in range(multiprocessing.cpu_count()):
        worker = Worker(work_queue, url, destinatioin)
        worker.start()

ココログアクセス解析自動ダウンロードアプリの使い方。

Dlgui

ファイルサイズが5.9MBで1MB以上あるので、ココログにはアップできませんでした。そこでhotfile.comというサービスにアップしたので、次のリンクからダウンロードしてください。zipなので適当に解凍して、出てきたexeファイルを実行してください。

ココログアクセス解析自動ダウンロードアプリのダウンロードリンク

簡単に書きますので、わからない場合上に書いたスクリプトの使い方を見てもらえば、解決すると思います。

最初のパラメータはブログのURLです。赤枠のところを自分のブログのものにしてください。次に、アクセス解析ページで「ブログ/マイフォトを選択」で自分のブログを選んでからウェブサイトのソースページをみて、156行目にあるbidとskというパラメータを見つけてください。これが2つめ3つめの値になります。

あとは初めの月と終わりの月を例に習って入力し、[ダウンロード先フォルダ選択]ボタンからダウンロード先を選びます。で、[ダウンロード開始]ボタンでダウンロードが始まります。

GUI版のソースコードも参考までにおいておきます。

「cocolog_access_DL.py」をダウンロード

« DreamPie 1.2.1でカーソルが出ない。タブが真っ白。解決。 | トップページ | スタイリッシュで高機能になったTiddlyWiki5の使い方。 »

Python」カテゴリの記事

ココログ」カテゴリの記事

パソコン・インターネット」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1169291/54056153

この記事へのトラックバック一覧です: ココログのアクセス解析ログのダウンロードお助けアプリ作ってみた。:

» ココログの旧アクセスログのダウンロードを効率的に済ます。 [なおさん亭::別館]
ココログの旧アクセスログのダウンロード期限が2月末に迫った、という話を書きました。ブログ運営期間が長くて、ブログの種類もいくつかあるので、月別にダウンロードしていては時間がいくらあっても足りないよ、ということで見つけたのがこのページ。 ココログのアクセス解析ログのダウンロードお助けアプリ作ってみた。: YATTSUKE BLOG 奇特な方が、旧アクセスログを一括でダウンロードできるツールを作ってくれました。今回、これを使わせていただき、どかんと全部ダウンロードしてしまおうというわけです。... [続きを読む]

« DreamPie 1.2.1でカーソルが出ない。タブが真っ白。解決。 | トップページ | スタイリッシュで高機能になったTiddlyWiki5の使い方。 »

広告欄


やっつけタイムライン

広告欄

はてブ

人目の訪問です。

  • follow us in feedly

    かなり更新が不定期なため、RSSリーダーをオススメします。現在Feedlyに122人登録頂いています。多謝!RSSを表示

    ブログランキング用 にほんブログ村 IT技術ブログ Pythonへ ブログランキングならblogram






    Jenny Mayhem
2017年2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        

Amazon

IT技術注目記事

無料ブログはココログ