Top > Web

Google Spreadsheetを使ってWebコンテンツをリアルタイム更新



Google Spreadsheetを皆さんは使っていらっしゃるでしょうか。ブラウザ上のExcelのようなもので、複数人で共有したい情報管理する上で非常に便利なツールです。 その”共有”によって、SpreadsheetのAPIを通じてPythonと共有するということも可能になっています。

ということは、SpreadsheetとサーバーサイドのPythonを使ってWeb上のコンテンツをリアルタイムで更新出来るということです。
図示すると以下のようなスキームです。

Spreadsheetによるリアルタイムコンテンツ管理 Spreadsheetによるリアルタイムコンテンツ管理

このスキーム実装後は、有料のCMSツールやプログラミングコードなしで、Excelライクなツールを使って誰でもWebページをリアルタイム更新が出来るようになります。 例えば、スタッフの出勤スケジュールをWeb上にアップしているネイルサロンやマッサージ店なんかでも活用出来るように思います。 また、可視化しているデータの更新もかなり簡単に出来ます。ちなみにWebに入力された情報をSpreadsheetに書き込むことも割と簡単に出来ます。

  • コンテンツ管理の例:当サイトのコンテンツ管理
  • データ更新の例:SpreadSheet上の我が家の光熱費を恥ずかし気もなく公開
  • ※例えば、光熱費のSpreadsheetはこのようになっていて、行を追記すれば勝手にWeb側でもリアルタイムでデータが増えます。

    サンプルデータ:光熱費データ サンプルデータ:光熱費データ


    事前準備

    さて、このスキームを実現する事前準備は以下の3ステップです。
    シンプルにするために前提としてWebサイトおよびサーバーを契約済みにしていますが、ローカル環境でも実現可能です。その前提の構築にあたってはこちら(簡単にWebサイトを作る3ステップ)を参考にしてください。

    1.Google Spreadsheet APIを有効化しクレデンシャルをゲット

    Googleアカウントを持っていない方は新規作成をした上で、Google API Consoleで新規プロジェクトを作成します。
    次にGoogle Spreadsheet APIを有効化します。その後サービス アカウント キーとしてCredentialを発行し、Credential情報をダウンロードします。ダウンロードしたjsonは以下のスクリプトから参照できるディレクトリに格納しておきます。

    2.読み込みたいSpreadsheetにクレデンシャル情報(Webアプリのe-mail)を登録

    先ほどゲットしたCredential情報内のclient_emailを、読み込みたいSpreadsheetの右上の”共有”から登録します。

    3.Spreadsheetを読み込み可視化するスクリプトの実装

    
    from oauth2client.service_account import ServiceAccountCredentials
    from df2gspread import gspread2df
    import pandas as pd
    
    # Spreadsheetを読み込み
    scope = ['https://spreadsheets.google.com/feeds']
    credentials = ServiceAccountCredentials.from_json_keyfile_name("ウェブアプリのCredential.json", scope)
    df = gspread2df.download('SpreadsheetのID',
                                wks_name='SpreadsheetのSheet名',
                                col_names=1,
                                row_names=1,
                                credentials=credentials,
                                start_cell='A1')
    
    # PandasのDataFrameをHTMLのTableとして可視化
    # 文字列が長い場合は途切れてしまうので以下の1行を追記して文字列を拡大
    pd.set_option("display.max_colwidth", 99)
    df_table = df.to_html(col_space=120,na_rep='-',
                                  formatters=None,
                                  float_format=None,
                                  index_names=True,
                                  justify='left',
                                  bold_rows=True,
                                  escape=True)
    
    # データをチャートとして可視化する場合はpandas_highchartsがオススメです
    

    上記スクリプトの例だと、df_tableがHTML文字列なのでそれをHTMLファイル内にrenderすることになるかと思います。
    以上をサーバーサイドに実装しておけば、後はSpreadsheetを更新すれば良いだけでなので便利です。




    Ads by Google