We’ve migrated our documentation to a new site, which means some URLs have changed.
Audience

セグメント作成: API

DMPセグメントをプログラムで作成する

Piano DMP API はデータとセグメントを管理するための様々な方法を提供しています。全てのリストは Piano DMP API にて確認できます。セグメント設定をアップロードするためにこの例で使用している関数は /segment/create です。

この例で作成しているデモのセグメントは発行物の 定義済み "URL領域" 内で、過去M日以内にNページビュー以上のユーザを含める必要があります。 

"URL領域" を定義するには 3つの方法があります。

  • ホスト名。例えば http://cxense.com (これはイベント属性のホストに対応しています)。サーバーの全てがページビュー数としてカウントされます。

  • URLパス。例えば https://www.cxense.com/solutions  内の solutions(これはドキュメント(キーワード)属性分類に対応しています)。その分類パス配下の全てがページビュー数としてカウントされます。

  • 完全修飾URL。例えば https://www.cxense.com/about/company.html (これはイベント属性URLに対応しています)。 特定のページへの訪問がページビュー数としてカウントされます。

あるいはこの3つのどれかを組み合わせます。

_username          = "<YOUR CXENSE USER NAME>"
_secret            = "<YOUR CXENSE API KEY>"
_siteGroupId       = "<SITE GROUP ID>"
_segments = [
    {
        "name"     : "My Test Segment",
        "taxonomy" : ["section1", "section2/subsection"],
        "host"     : ["server1.domain", "server2.domain"],
        "url"      : ["http://server3.domain/some/path/someFile.html"],
        "min"      : 25,
        "days"     : 30
    }
]

import json, datetime, hmac, hashlib, http.client
     
def cxApi(path, obj):
    date = datetime.datetime.utcnow().isoformat() + "Z"
    signature = hmac.new(_secret.encode('utf-8'), date.encode('utf-8'), digestmod=hashlib.sha256).hexdigest()
    headers = {"X-cXense-Authentication": "username=%s date=%s hmac-sha256-hex=%s" % (_username, date, signature)}
    connection = http.client.HTTPSConnection("api.cxense.com", 443)
    connection.request("POST", path, json.dumps(obj), headers)
    response = connection.getresponse()
    status = response.status
    responseObj = json.loads(response.read().decode('utf-8'))
    connection.close()
    return status, responseObj
   
def errorHandling(status, response, message):
    if status != 200:
        raise Exception("%s (http status = %s, error details: '%s')" % (message, status, response['error']))

def createUserSegment(requestObj):
    status, response = cxApi('/segment/create', requestObj)
    errorHandling(status, response, "Unable to retrieve traffic data")
    return response

def getFilterObj(days, minPageViews, filterGroups):
    return [{
        "type": "time",
        "start": days,
        "filter": {
            "type": "user", 
            "having": {
                "min": minPageViews,
                "filter": {
                    "type": "or",
                    "filters": filterGroups
                }
            }
        }
    }]

def genDescription(items, minPageViews, days):
    return "Minimum of %s page views during last %s days across: %s" % (minPageViews, days, ', '.join(items))

def getSegmentRequestObj(siteGroupId, segment):
    mappings = {'taxonomy':'keyword', 'host':'event', 'url':'event'}
    filterGroups = []
    for group in mappings.keys():
        filterGroups.append({"type":mappings[group], "group":group, "items":segment[group]})    
    minPageViews = segment['min'] if 'min' in segment else '1'  
    return {
        "siteGroupId": siteGroupId,
        "name": segment['name'] if 'name' in segment else '<No segment name defined>',
        "description": genDescription([', '.join(group['items']) for group in filterGroups], minPageViews, segment['days']),
        "filters": getFilterObj("-%sd" % segment['days'], minPageViews, filterGroups),
        "active": True
    }     

for segment in _segments:
    requestObj = getSegmentRequestObj(_siteGroupId, segment)
    print(json.dumps(requestObj, indent=4))
    print(createUserSegment(requestObj))

上記の例を実行すると、新しく作成されたセグメントのIDでフォローされるオーディエンスセグメントフィルタ式が生成されます。

{
    "filters": [
        {
            "filter": {
                "having": {
                    "min": 25,
                    "filter": {
                        "filters": [
                            {
                                "group": "taxonomy",
                                "items": [
                                    "section1",
                                    "section2/subsection"
                                ],
                                "type": "keyword"
                            },
                            {
                                "group": "url",
                                "items": [
                                    "http://server3.domain/some/path/someFile.html"
                                ],
                                "type": "event"
                            },
                            {
                                "group": "host",
                                "items": [
                                    "server1.domain",
                                    "server2.domain"
                                ],
                                "type": "event"
                            }
                        ],
                        "type": "or"
                    }
                },
                "type": "user"
            },
            "type": "time",
            "start": "-30d"
        }
    ],
    "active": true,
    "description": "Minimum of 25 page views during last 30 days across: section1, section2/subsection, http://server3.domain/some/path/someFile.html, server1.domain, server2.domain",
    "name": "My Test Segment",
    "siteGroupId": "9222355312367160874"
}
{'id': '8mg5yqyr0jqx'} 


自動で生成された説明付きのセグメントはサイトグループのオーディエンスセグメントのリストに表示されます。

image-20211223-054509.png

APIで作成されたセグメントはUIのセグメントエディタから更新することもできます(詳しくは セグメント作成: UI をご覧ください)。

Last updated: