メール(Email)

レポ-トで表示される内容をメ-ル送信してくれる機能がある
上の赤枠では、現在表示しているレポートに関するメールを送信設定に移る。
下の赤枠では、このプロファイルでのメール送信設定の全体(メールのスケジュール管理)が表示される


どういう設定ができるのか?

  • どういうレポート(データ)を送れるのか
  • 間隔、日程は?
    • 毎日、毎月曜、毎月、毎四半期 の4パタ-ン
    • なので、毎日に設定すれば、昨日一日のデ-タが配信される。
    • その場で、すぐに一回限りの配信をする事も可能
  • 形式は?
    • PDF, CSV, XML, TSV, EXCEL形式。
  • 送信相手は?
    • 自分以外でも、OK
    • なので、レポート閲覧権限が無い人にデータを送るのに便利かも

しかし、僕の中では意外に使いにくい印象。

使いにくい理由としては、
  • 添付ファイルを開くのは面倒。それなら、webからレポ-ト画面にいけばいい。
    この特定の数字だけみたい。それだけ、メ-ルのタイトルや本文で、欲しい!

Data Export API で、昨日のトラフィックレポ-トの数字のみを出すスクリプトを書いた。

  • 出すのは、閲覧開始数とペ-ジ別セッション数
  • 集計基準には、
    • ソース、キーワード
    • ソース、参照サイト
    • ソース、キャンペーン名
  • 前提は、Pythonがあって、gdata ライブラリが入っている事 
ちょっと、余分な情報(csv, docs-spreadsheet)が付いてるけど。
# -*- coding: utf-8 -*-
import gdata.analytics
import gdata.analytics.service
#import gdata.docs
#import gdata.spreadsheet
import datetime
import os
import re
import urllib
def getGaData(id, email, pw, dimensions, metrics, sort, flt, sdate, edate):
    gas = gdata.analytics.service.AnalyticsDataService()
    gas.ClientLogin(email, pw)
    # profileを集めてくる。
    #lt = gas.GetAccountList()
    # そのprofileのtableIdを取る。
    #id = [x.tableId[0].text for x in lt.entry][2]
    # このtableIdを元に、metricsとdimensionを指定する
    # for metrics
    data = gas.GetData(id,
                       ','.join(dimensions).rstrip(),
                       ','.join(metrics).rstrip(),
                       sort,
                       flt,
                       sdate, edate,
                       1, 1000)
    ret = []
    
    def f(x):
        #import pdb;pdb.set_trace()
        return urllib.unquote(x.value)
    
    for x in data.entry:
        y = x.dimension + x.metric
        ret.append(filter(f, y))
    #data = [[x.dimension , x.metric] for x in data.entry]
    header = [x.replace("ga:","") for x in dimensions + metrics]
    ret.insert(0,header)
    return ret

def writeCSV(iter,filename):
    import csv
    writer = csv.writer(file(filename,"a"))
    writer.writerows(iter)
    writer.writerow(["\n"])
    return filename

import smtplib
from email.MIMEText import MIMEText
from email.Utils import formatdate    
def create_message(from_addr, to_addr, subject, body):
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = from_addr
    msg['To'] = to_addr
    msg['Date'] = formatdate()
    return msg

def send_via_gmail(from_addr, to_addr, msg, id, pw):
    s = smtplib.SMTP('smtp.gmail.com', 587)
    s.ehlo()
    s.starttls()
    s.ehlo()
    s.login(id, pw)
    s.sendmail(from_addr, [to_addr], msg.as_string())
    s.close()

if __name__ == "__main__":
    #set for configuration
    gaids = ["ga:xxxxxxx","ga:xxxxxxx"]
    email_for_login = "yourname@gmail.com"
    password = "xxxxxxxx"
    from_addr = "me@gmail.com"
    to_addr = "you@gmail.com"

    #set for query
    dimensions = []
    data = []
    dimensions.append(["ga:pageTitle", "ga:landingPagePath", "ga:keyword", "ga:source"])
    dimensions.append(["ga:pageTitle", "ga:landingPagePath", "ga:campaign", "ga:source"])
    dimensions.append(["ga:pageTitle", "ga:landingPagePath", "ga:referralPath", "ga:source"])
    metrics = ["ga:entrances", "ga:uniquePageviews"]
    flt = "ga:entrances>0"
    sort = "-ga:entrances"
    from datetime import datetime, timedelta
    day_end = (datetime.today() - timedelta(1)).date()
    day_start = day_end # - datetime.delta(1).date()
    # data = compare(d1_sd, d1_ed, d2_sd, d2_ed, dimensions, metrics, flt, sort)
    # filename = writeCSV(data,[d1_sd,d1_ed,d2_sd,d2_ed])
    # postSpData(filename, email2, pw2)

    for gaid in gaids:
        filename = os.getenv("HOME") 
        filename += "/ga_data/" + gaid
        filename += "-" + day_end.strftime("%Y%m%d") 
        filename += ".csv"
        if os.path.isfile(filename):
            os.remove(filename)
        for dms in dimensions:
            data = getGaData(gaid,email_for_login,password,dms,metrics,sort,flt,day_start,day_end)
            filename = writeCSV(data,filename)
        a = ''
        for line in open(filename, 'r'):
            if not re.search(r'not set', line):
                a += urllib.unquote(line)+"\n\n"
        msg = create_message(from_addr, to_addr, 'daily traffic'+day_end.strftime("%Y%m%d"), a)
        send_via_gmail(from_addr, to_addr, msg, email_for_login, password)





Comments