Digital Measurement SEI Content Viewing: Difference between revisions
From Engineering Client Portal
({) |
|||
(8 intermediate revisions by the same user not shown) | |||
Line 13: | Line 13: | ||
=== S3 Bucket and Prefix Naming Convention === | === S3 Bucket and Prefix Naming Convention === | ||
<code>useast1-nlsn-w-dig-sei-<'''partnerid'''>-feeds-'''<env>/<filetype>/<split>/yyyy/mm/dd/hh/<object>'''</code> | <code>useast1-nlsn-w-dig-sei-<'''partnerid'''>-feeds-'''<env>'''/'''<filetype>'''/'''<split>'''/'''yyyy/mm/dd/hh'''/'''<object>'''</code> | ||
{| class="wikitable" | {| class="wikitable" | ||
!'''Name''' | !'''Name''' | ||
Line 74: | Line 74: | ||
=== Success File === | === Success File === | ||
Empty _SUCCESS file should be provided to indicate that data delivery for a particular hour and split is completed (even if there is no data for that particular hour and split). | Empty <code>'''_SUCCESS'''</code> file should be provided to indicate that data delivery for a particular hour and split is completed (even if there is no data for that particular hour and split). | ||
=== Manifest File === | === Manifest File === | ||
A manifest should be provided which contains metadata related to the uploaded file(s). The manifest is a text file in json format that implements the AWS unload manifest file format. It has the same name as the data file, but has the _manifest suffix. | A manifest should be provided which contains metadata related to the uploaded file(s). The manifest is a text file in .json format that implements the AWS unload manifest file format. It has the same name as the data file, but has the <code>'''_manifest'''</code> suffix. | ||
Example: | Example: | ||
<syntaxhighlight lang="JSON"> | |||
{ | { | ||
"entries": [ | "entries": [ | ||
{"url":"s3://bucket/prefix/0000_object_00.snappy.parquet", "mandatory":true}, | {"url":"s3://bucket/prefix/0000_object_00.snappy.parquet", "mandatory":true}, | ||
{"url":"s3://bucket/prefix/0001_object_00.snappy.parquet", "mandatory":true}, | {"url":"s3://bucket/prefix/0001_object_00.snappy.parquet", "mandatory":true}, | ||
{"url":"s3://bucket/prefix/0002_object_00.snappy.parquet", "mandatory":true} | |||
{"url":"s3://bucket/prefix/0002_object_00.snappy.parquet", "mandatory":true} | |||
{"url":"s3://bucket/prefix/0003_object_00.snappy.parquet", "mandatory":true} | {"url":"s3://bucket/prefix/0003_object_00.snappy.parquet", "mandatory":true} | ||
], | ], | ||
"meta": { | "meta": { | ||
"schema_version": "S2SV1.7.0", | "schema_version": "S2SV1.7.0", | ||
"accreditation_status": "0", | "accreditation_status": "0", | ||
"start_time": "1710154800", | "start_time": "1710154800", | ||
"end_time": "1710158399", | "end_time": "1710158399", | ||
"record_count": 31337 | |||
"record_count": | |||
} | } | ||
} | |||
</syntaxhighlight> | |||
The manifest contains a complete list of all files provided for a given period and split, as well as a meta data (a.k.a. header) which should include the following attributes: | The manifest contains a complete list of all files provided for a given period and split, as well as a meta data (a.k.a. header) which should include the following attributes: | ||
{| class="wikitable" | {| class="wikitable" | ||
!'''Parameter''' | |||
!'''Description''' | |||
!'''Required''' | |||
!'''Specified''' | |||
!'''Format / Example''' | |||
!'''Type''' | |||
|- | |- | ||
|schema_version | |schema_version | ||
Line 122: | Line 112: | ||
|Yes | |Yes | ||
|Nielsen | |Nielsen | ||
|S2SV1.7.0 | |<code>S2SV1.7.0</code> | ||
|String | |String | ||
|- | |- | ||
Line 129: | Line 119: | ||
|No | |No | ||
|Client | |Client | ||
|MRC = 1 | |<code>MRC = 1</code> | ||
|String | |String | ||
|- | |- | ||
Line 137: | Line 127: | ||
|Client | |Client | ||
|Format:32-bit unsigned int Unix time in seconds | |Format:32-bit unsigned int Unix time in seconds | ||
Example: <code>1710154800</code> | |||
|String | |String | ||
|- | |- | ||
Line 144: | Line 135: | ||
|Client | |Client | ||
|Format:32-bit unsigned int Unix time in seconds | |Format:32-bit unsigned int Unix time in seconds | ||
Example: <code>1710158399</code> | |||
|String | |String | ||
|- | |- | ||
Line 150: | Line 142: | ||
|Yes | |Yes | ||
|Client | |Client | ||
|Example: 31337 | |Example: <code>31337</code> | ||
|Number | |Number | ||
|} | |} | ||
=== Data delivery example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC): === | |||
<code>useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0000.json | |||
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0001.json | |||
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0002.json | |||
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0003.json | |||
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_manifest | |||
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/_SUCCESS</code> | |||
= SLA = | = SLA = | ||
Line 174: | Line 167: | ||
The reported content “reference” time needs to match the actual content that was played out with plus/minus 10 seconds (for clarity: start and end times can each be off by up to 10 seconds, so the combined under/over reporting for each individual viewing segment should be no greater than 20 seconds) | The reported content “reference” time needs to match the actual content that was played out with plus/minus 10 seconds (for clarity: start and end times can each be off by up to 10 seconds, so the combined under/over reporting for each individual viewing segment should be no greater than 20 seconds) | ||
= CTV, Mirroring, and Casting = | == CTV, Mirroring, and Casting == | ||
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple TV), audit ping should fire from the OTT device, and Viewing data should reside in OTT Viewing file. | For apps native to the OTT device ''(i.e. downloading and viewing a streaming app to an Apple TV)'', audit ping should fire from the OTT device, and Viewing data should reside in OTT Viewing file. | ||
[[File: | |||
For mirroring, where video playback occurs on the mobile device and OTT device, only one Viewing file row is necessary where, if possible to determine, set: "secondscr":"MIR" and include in respective mobile platform Viewing file. | [[File:Phone_Playback.png]] | ||
For mirroring, where video playback occurs on the mobile device and OTT device, only one Viewing file row is necessary where, if possible to determine, set: <code>"secondscr":"MIR"</code> and include in respective mobile platform Viewing file. | |||
For a casting scenario where content is controlled via the mobile device, but displayed only on the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile device before the casting occurs and at the end of playback from the mobile device only. Viewing data resides in the respective mobile platform Viewing file. | For a casting scenario where content is controlled via the mobile device, but displayed only on the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile device before the casting occurs and at the end of playback from the mobile device only. Viewing data resides in the respective mobile platform Viewing file. | ||
<syntaxhighlight lang="JSON"> | |||
{... | |||
"sessionid":"ABC", | |||
"streamid":"DEF", | |||
"position":[ | |||
{ | |||
"referencestart":"xxxxxxx123", | |||
"referenceend":"xxxxxxx183", | |||
"playheadstart":"0", | |||
"playheadend":"60" | |||
}, | |||
{ | |||
"referencestart":"xxxxxxx243", | |||
"referenceend":"xxxxxxx303", | |||
"playheadstart":"120", | |||
"playheadend":"180" | |||
} | |||
] | |||
} | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="JSON"> | |||
{... | |||
"sessionid":"ABC", | |||
"streamid":"DEF", | |||
"position":[ | |||
{ | |||
"referencestart":"xxxxxxx183", | |||
"referenceend":"xxxxxxx243", | |||
"playheadstart":"60", | |||
"playheadend":"120" | |||
} | |||
], | |||
"secondscr":"OTT" | |||
} | |||
</syntaxhighlight> | |||
== Schema Parameter Definitions == | ==Schema Parameter Definitions == | ||
{| class="wikitable" | {| class="wikitable" | ||
! colspan="2" |'''Parameter''' | |||
!'''Description''' | |||
!'''Required''' | |||
!'''Format / Example''' | |||
|- | |- | ||
| colspan="2" |apn | | colspan="2" |apn | ||
|Application name | |Application name | ||
|Yes | |Yes | ||
|Format: alphanumeric | | | ||
Format: alphanumeric | |||
Example: BestAppIOS | Example: | ||
<code>BestAppIOS</code> | |||
|- | |- | ||
| colspan="2" |apv | | colspan="2" |apv | ||
|Application version | |Application version | ||
|Yes | |Yes | ||
|Format: alphanumeric | | | ||
Format: alphanumeric | |||
Example: 21.5 | Example: | ||
<code>21.5</code> | |||
|- | |- | ||
| colspan="2" |sessionid | | colspan="2" |sessionid | ||
|Unique, client generated value that represents the start of a user session. | |Unique, client generated value that represents the start of a user session. "Session" is defined as continuous (flexible) interaction with an application that may span multiple streams. | ||
|Yes | |Yes | ||
|Format: alphanumeric | | | ||
Format: alphanumeric | |||
Example: Random GUID: | Example: Random GUID: | ||
<code>cdcde33c-b62f-4f17-a9c8-0db4f78e09d6</code> | |||
|- | |- | ||
| colspan="2" |streamid | | colspan="2" |streamid | ||
|ID for every new instance of exposure to a different asset | |ID for every new instance of exposure to a different asset | ||
|Yes, if no sessionid | |Yes, if no sessionid | ||
|Format: alphanumeric | | | ||
Format: alphanumeric | |||
Example: Random GUID: d7a909f1-5e77-4af7-8a9b-f2… | Example: Random GUID: | ||
<code>d7a909f1-5e77-4af7-8a9b-f2…</code> | |||
|- | |- | ||
| colspan="2" |streamended | | colspan="2" |streamended | ||
|Stream is known to have ended in this file | |Stream is known to have ended in this file | ||
|Yes | |Yes | ||
|Format: integer | | | ||
Format: integer | |||
Example: 1 (stream continues in subsequent file), 2 (stream closed) | Example: | ||
*<code>1</code> (stream continues in subsequent file), | |||
*<code>2</code> (stream closed) | |||
|- | |- | ||
| colspan="2" |publisher_user_id | | colspan="2" |publisher_user_id | ||
|Publisher-specific user ID (must remain persistent indefinitely) | |Publisher-specific user ID (must remain persistent indefinitely) | ||
|No | |No | ||
|Format: alphanumeric | | | ||
Format: alphanumeric | |||
Example: Salted, hashed user ID: | Example: | ||
Salted, hashed user ID: | |||
8f434346648f6b96d9dda901c5… | <code>8f434346648f6b96d9dda901c5…</code> | ||
|- | |- | ||
| colspan="2" |provider_user_id | | colspan="2" |provider_user_id | ||
|Provider-specific user ID (must remain persistent indefinitely) | |Provider-specific user ID (must remain persistent indefinitely) | ||
|No | |No | ||
|Format: alphanumeric | | | ||
Format: alphanumeric | |||
Example: Salted, hashed user ID: | Example: Salted, hashed user ID: | ||
2cf24dba5fb0a30e26e83b2ab9… | <code>2cf24dba5fb0a30e26e83b2ab9…</code> | ||
|- | |- | ||
| colspan="2" |assetid | | colspan="2" |assetid | ||
|In-house id used for a video asset (TMS ID if available) | |In-house id used for a video asset (TMS ID if available) | ||
|Yes | |Yes | ||
| | | | ||
Format: alphanumeric | |||
Example: | Example: | ||
<code>VID123456789</code> | |||
|- | |- | ||
| colspan="2" |ad_load_flag | | colspan="2" |ad_load_flag | ||
|linear or dynamic ad load | |linear or dynamic ad load | ||
|Yes | |Yes | ||
|Format: integer; | | | ||
Format: integer; | |||
2 = dynamic ad load | *<code>0</code> = Default / Unknown | ||
*<code>1</code> = linear ad load | |||
*<code>2</code> = dynamic ad load | |||
|- | |- | ||
| colspan="2" |ad_support_flag | | colspan="2" |ad_support_flag | ||
|Intended method of monetizing the content | |Intended method of monetizing the content | ||
|Yes | |Yes | ||
|Format: integer; | | | ||
Format: integer; | |||
2 = (not known) | *<code>0</code> = (no ads), | ||
*<code>1</code> = (content is supported by ads) | |||
*<code>2</code> = (not known) | |||
Note: set to "1" if content ad support was intended but did not occur | Note: set to "<code>1</code>" if content ad support was intended but did not occur | ||
|- | |- | ||
| colspan="2" |position | | colspan="2" |position | ||
Line 347: | Line 325: | ||
See below for additional details on position array parameters | See below for additional details on position array parameters | ||
|Yes | |Yes | ||
|Format: | | | ||
Format: | |||
<syntaxhighlight lang="JSON"> | |||
"position": [{ | "position": [{ | ||
"referencestart":"[timestamp]", | "referencestart":"[timestamp]", | ||
"referenceend":"[timestamp]" | |||
"referenceend":"[timestamp]" | |||
"playheadstart":"[playhead position]", | "playheadstart":"[playhead position]", | ||
"playheadend":"[playhead position]" | "playheadend":"[playhead position]" | ||
}] | }] | ||
</syntaxhighlight> | |||
|- | |- | ||
|{ | |{ | ||
Line 365: | Line 341: | ||
|Wall clock reference start time | |Wall clock reference start time | ||
|Yes | |Yes | ||
|Format: Unix timestamp in 32-bit unsigned int in seconds | | | ||
Format: Unix timestamp in 32-bit unsigned int in seconds | |||
Example: 1577858505 | Example: | ||
<code>1577858505</code> | |||
|- | |- | ||
| | | | ||
Line 373: | Line 351: | ||
|Wall clock reference end time | |Wall clock reference end time | ||
|Yes | |Yes | ||
|Format: Unix timestamp in 32-bit unsigned int in seconds | | | ||
Format: Unix timestamp in 32-bit unsigned int in seconds | |||
Example: 1577858775 | Example: | ||
<code>1577858775</code> | |||
|- | |- | ||
| | | | ||
Line 381: | Line 361: | ||
|Content position start time | |Content position start time | ||
|Yes | |Yes | ||
|Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD) | | | ||
Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD) | |||
Example: 1577858515 | Example: | ||
<code>1577858515</code> | |||
|- | |- | ||
|<nowiki>}</nowiki> | |<nowiki>}</nowiki> | ||
Line 389: | Line 371: | ||
|Content position end time | |Content position end time | ||
|Yes | |Yes | ||
|Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD) | | | ||
Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD) | |||
Example: 1577858785 | Example: | ||
<code>1577858785</code> | |||
|- | |- | ||
| colspan="2" |viewedads | | colspan="2" |viewedads | ||
Line 398: | Line 382: | ||
See below for additional details on position array parameters | See below for additional details on position array parameters | ||
|Yes | |Yes | ||
|Format: | | | ||
Format: | |||
"viewedads": [{"adpod":"0","adposition":"0","adid":"0","isdarid":"0","adstart":"utc","adend":"utc","advisible":"0","adfocus":"0","adaudio":"0"}] | <syntaxhighlight lang="JSON"> | ||
"viewedads": | |||
[ | |||
{ | |||
"adpod":"0", | |||
"adposition":"0", | |||
"adid":"0", | |||
"isdarid":"0", | |||
"adstart":"utc", | |||
"adend":"utc", | |||
"advisible":"0", | |||
"adfocus":"0", | |||
"adaudio":"0" | |||
} | |||
] | |||
</syntaxhighlight> | |||
|- | |- | ||
|{ | |{ | ||
Line 408: | Line 407: | ||
Increment for each AdPod. If the same AdPod is played out twice (due to rewind), still increment the AdPod sequence to reflect the sequence the AdPods are played. | Increment for each AdPod. If the same AdPod is played out twice (due to rewind), still increment the AdPod sequence to reflect the sequence the AdPods are played. | ||
|Yes | |Yes | ||
|Format: Integer | | | ||
Format: Integer | |||
Example: 2 | Example: | ||
<code>2</code> | |||
|- | |- | ||
| | | | ||
Line 418: | Line 419: | ||
Increment each time a new Ad is encountered. If the same Ad is played out twice (due to rewind), still increment the Ad sequence to reflect the sequence the Ads are played | Increment each time a new Ad is encountered. If the same Ad is played out twice (due to rewind), still increment the Ad sequence to reflect the sequence the Ads are played | ||
|Yes | |Yes | ||
|Format: Integer | | | ||
Format: Integer | |||
Example: 1 | Example: | ||
<code>1</code> | |||
|- | |- | ||
| | | | ||
|adid | |adid | ||
|The unique identifier for this Ad | | The unique identifier for this Ad | ||
|No | |No | ||
|Format: alphanumeric | | | ||
Format: alphanumeric | |||
In-house AdId, Industry AdID, AdNetwork ID or DAR placement ID | In-house AdId, Industry AdID, AdNetwork ID or DAR placement ID | ||
Line 434: | Line 438: | ||
|Is the AdId being passed a Nielsen DAR placement ID | |Is the AdId being passed a Nielsen DAR placement ID | ||
|Required if AdID | |Required if AdID | ||
|Format: integer | | | ||
Format: integer | |||
0 = is NOT DAR ID; 1 = is a DAR ID | *<code>0</code> = is NOT DAR ID; | ||
*<code>1</code> = is a DAR ID | |||
|- | |- | ||
| | | | ||
Line 442: | Line 447: | ||
|Wall clock reference start time | |Wall clock reference start time | ||
|Yes | |Yes | ||
|Format: Unix timestamp in 32-bit unsigned int in seconds | | | ||
Format: Unix timestamp in 32-bit unsigned int in seconds | |||
|- | |- | ||
|<nowiki>}</nowiki> | |<nowiki>}</nowiki> | ||
Line 448: | Line 454: | ||
|Wall clock reference end time | |Wall clock reference end time | ||
|Yes | |Yes | ||
|Format: Unix timestamp in 32-bit unsigned int in seconds | | | ||
Format: Unix timestamp in 32-bit unsigned int in seconds | |||
|- | |- | ||
| colspan="2" |device_id | | colspan="2" |device_id | ||
Line 455: | Line 462: | ||
available | available | ||
|A487421B-XXXX-YYYY-8343-E3BBB66E44F2 | |<code>A487421B-XXXX-YYYY-8343-E3BBB66E44F2</code> | ||
|- | |- | ||
| colspan="2" |hem_sha256 | | colspan="2" |hem_sha256 | ||
Line 462: | Line 469: | ||
Note: email normalization rules applied before hashing | Note: email normalization rules applied before hashing | ||
|Strongly Preferred | |Strongly Preferred | ||
|55C06A30DAA5D5F382FDEB8C702EC57875CC9D91A7C78BB620053FD81DC… | |<code>55C06A30DAA5D5F382FDEB8C702EC57875CC9D91A7C78BB620053FD81DC…</code> | ||
|- | |- | ||
| colspan="2" |luid | | colspan="2" |luid | ||
|Living Unit ID - Experian Household ID | |Living Unit ID - Experian Household ID | ||
|Yes, for CTV if available | |Yes, for CTV if available | ||
|B0EOFEDgD | |<code>B0EOFEDgD</code> | ||
|- | |- | ||
| colspan="2" |uoo | | colspan="2" |uoo | ||
|User opt out flag for demographic measurement | |User opt out flag for demographic measurement | ||
|Yes | |Yes | ||
|Format: integer | | | ||
Format: integer | |||
0 = not opt-out | *<code>0</code> = not opt-out | ||
*<code>1</code> = opt-out | |||
|- | |- | ||
| colspan="2" |xdua | | colspan="2" |xdua | ||
|Device HTTP User Agent string | |Device HTTP User Agent string | ||
|Yes | |Yes | ||
|Format: alphanumeric, | | | ||
Format: alphanumeric, | |||
Example: Apple-iPhone1C2/801.293 | Example: | ||
<code>Apple-iPhone1C2/801.293</code> | |||
|- | |- | ||
| colspan="2" |xff | | colspan="2" |xff | ||
|IP address | |IP address | ||
|Yes | |Yes | ||
|Format: xxx.xxx.xxx.xxx | | | ||
Format: xxx.xxx.xxx.xxx | |||
|- | |- | ||
| colspan="2" |psudo_id_sha256 | | colspan="2" |psudo_id_sha256 | ||
|Hashed Device User Agent string + IP address | |Hashed Device User Agent string + IP address | ||
|No | |No | ||
|421c76d77563afa1914846b010bd164f395bd34c2102e5e99e0cb9cf173… | |<code>421c76d77563afa1914846b010bd164f395bd34c2102e5e99e0cb9cf173…</code> | ||
|- | |- | ||
| colspan="5" |The following 4 parameters become mandatory if Device User Agent String (UAS) is not available | | colspan="5" | The following 4 parameters become mandatory if Device User Agent String (UAS) is not available | ||
|- | |- | ||
| colspan="2" |device_platform | | colspan="2" |device_platform | ||
|Device platform(mobile, desktop, connected device) | |Device platform(mobile, desktop, connected device) | ||
|Required if no UAS | |Required if no UAS | ||
|DSK, MBL, OTT | |<code>DSK</code>, <code>MBL</code>, <code>OTT</code> | ||
|- | |- | ||
| colspan="2" |device_type | | colspan="2" |device_type | ||
|Device type for connected devices | |Device type for connected devices | ||
|Required if no UAS | |Required if no UAS | ||
|AMN, APL, DVD, GGL, PSX, RKU, STB, STV, XBX | |<code>AMN</code>, <code>APL</code>, <code>DVD</code>, <code>GGL</code>, <code>PSX</code>, <code>RKU</code>, <code>STB</code>, <code>STV</code>, <code>XBX</code> | ||
|- | |- | ||
| colspan="2" |os_group | | colspan="2" |os_group | ||
|Operating system of mobile devices. All other device should be NA | |Operating system of mobile devices. All other device should be NA | ||
|Required if no UAS | |Required if no UAS | ||
|IOS, DROID, NA | |<code>IOS</code>, <code>DROID</code>, <code>NA</code> | ||
|- | |- | ||
| colspan="2" |device_group | | colspan="2" |device_group | ||
|Type of device: phone, tablet, desktop, set top box (CTV or OTT), unknown | |Type of device: phone, tablet, desktop, set top box (CTV or OTT), unknown | ||
|Required if no UAS | |Required if no UAS | ||
|DSK, PHN, TAB, STV, DVD, PMP, OTHER, STB, XBX, PSX, AMN, APL, GGL, RKU, UNWN | |<code>DSK</code>, <code>PHN</code>, <code>TAB</code>, <code>STV</code>, <code>DVD</code>, <code>PMP</code>, <code>OTHER</code>, <code>STB</code>, <code>XBX</code>, <code>PSX</code>, <code>AMN</code>, <code>APL</code>, <code>GGL</code>, <code>RKU</code>, <code>UNWN</code> | ||
|- | |- | ||
| colspan="5" |The following 4 parameters become mandatory if IP Address is not available | | colspan="5" | The following 4 parameters become mandatory if IP Address is not available | ||
|- | |- | ||
| colspan="2" |robotic_flag | | colspan="2" |robotic_flag | ||
Line 521: | Line 532: | ||
|Required if no IP | |Required if no IP | ||
|Format: integer | |Format: integer | ||
*<code>0</code> = not bot, | |||
0 = not bot, 1 = bot | *<code>1</code> = bot | ||
|- | |- | ||
| colspan="2" |zip_code | | colspan="2" |zip_code | ||
|ZIP code where viewing occurred | | ZIP code where viewing occurred | ||
|Required if no IP | |Required if no IP | ||
|10001 | |<code>10001</code> | ||
|- | |- | ||
| colspan="2" |country | | colspan="2" |country | ||
|Country ISO 3166 ALPHA-2 | |Country ISO 3166 ALPHA-2 | ||
|Required if no IP | |Required if no IP | ||
|US, CA, etc. | | <code>US</code>, <code> CA</code>, etc. | ||
|} | |} | ||
Note: All parameters are case sensitive. | Note: All parameters are case sensitive. | ||
[[Category:Digital]] | [[Category:Digital]] |
Latest revision as of 15:27, 18 November 2024
This interface specification depicts the file schema required to supply Nielsen with response-level Viewing data in a “Server-to-Server” relationship for incorporation into the Nielsen One Content and/or Nielsen One Ads products.
Delivery Specifications
Files should be delivered at a fixed cadence in a dedicated S3 bucket following the outlined in this spec prefix and object naming conventions and data formats.
- All prefix labels and file names should be lowercase except for app ids.
- Supported format are:
- Text files with utf-8 encoding in JSON Lines format;
- Apache Parquet format with snappy compression;
- All data files have extensions to indicate the file format (.json | .parquet)
- Data file can be partitioned into multiple parts with min size of 256MB
- Data can be delivered separately in multiple splits, if needed due to organizational, technical or privacy requirements. This allows to permission s3 access separately, to process data independently and to persist data partitioned, within the limits of the SEI system;
S3 Bucket and Prefix Naming Convention
useast1-nlsn-w-dig-sei-<partnerid>-feeds-<env>/<filetype>/<split>/yyyy/mm/dd/hh/<object>
Name | Description |
---|---|
partnerid | Abbreviation provided by Nielsen for each provider or publisher |
env | test or prod
|
filetype | exposure , dcr-exposure , dar-exposure , audio-exposure , etc., where:
|
split | a separate data split, can be by platform (ex.: ios, browser, android, ctv), by country (us, ca, jp, etc.), by publisher, by team, etc. or “all” (if data is provided in one split). |
yyyy/mm/dd/hh |
|
S3 Bucket and Prefix Naming Convention
<partnerid>_<filetype>_<intid>_<appid>_<starttime>_<endtime>.[json|parquet]
Name | Description |
---|---|
partnerid | Abbreviation provided by Nielsen for each provider or publisher |
filetype | exposure, dcr-exposure, dar-exposure, audio-exposure, etc., where:
|
initid | integration id: unique identifier provided by Nielsen |
appid | Nielsen-provided server application identifier |
starttime | start date and hour of the data in the file in UTC
|
endtime | end date and hour (not inclusive) of the data in the file in UTC
|
Success File
Empty _SUCCESS
file should be provided to indicate that data delivery for a particular hour and split is completed (even if there is no data for that particular hour and split).
Manifest File
A manifest should be provided which contains metadata related to the uploaded file(s). The manifest is a text file in .json format that implements the AWS unload manifest file format. It has the same name as the data file, but has the _manifest
suffix.
Example:
{
"entries": [
{"url":"s3://bucket/prefix/0000_object_00.snappy.parquet", "mandatory":true},
{"url":"s3://bucket/prefix/0001_object_00.snappy.parquet", "mandatory":true},
{"url":"s3://bucket/prefix/0002_object_00.snappy.parquet", "mandatory":true}
{"url":"s3://bucket/prefix/0003_object_00.snappy.parquet", "mandatory":true}
],
"meta": {
"schema_version": "S2SV1.7.0",
"accreditation_status": "0",
"start_time": "1710154800",
"end_time": "1710158399",
"record_count": 31337
}
}
The manifest contains a complete list of all files provided for a given period and split, as well as a meta data (a.k.a. header) which should include the following attributes:
Parameter | Description | Required | Specified | Format / Example | Type |
---|---|---|---|---|---|
schema_version | Schema Version | Yes | Nielsen | S2SV1.7.0
|
String |
accreditation_status | Accreditation Status | No | Client | MRC = 1
|
String |
data_start_time | Data Start Time (min) | Yes | Client | Format:32-bit unsigned int Unix time in seconds
Example: |
String |
data_end_time | Data Start Time (max) | Yes | Client | Format:32-bit unsigned int Unix time in seconds
Example: |
String |
record_count | Number of records in data file | Yes | Client | Example: 31337
|
Number |
Data delivery example for hour 11 (11:00:00 AM UTC to 11:59:59 PM UTC):
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0000.json
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0001.json
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0002.json
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_0003.json
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/acme_dtvr-exposure_a9ddf15ea054ea415718767ea6_P47C2495B-BBBA-56DE-BE99-14758F92F034_2024031111_2024031112_manifest
useast1-nlsn-w-dig-sei-acme-feeds-prod/dar-exposure/ios/2022/05/25/11/_SUCCESS
SLA
The files must be delivered into the proper S3 bucket within 3 hours of the start of that hourly viewing file interval. For example, files from 1:00 AM to 2:00 AM must be delivered before 4 AM.
Accuracy of Measurement
The reported “wall clock” time of viewing needs to be within 25 seconds of the actual viewing time.
The reported content “reference” time needs to match the actual content that was played out with plus/minus 10 seconds (for clarity: start and end times can each be off by up to 10 seconds, so the combined under/over reporting for each individual viewing segment should be no greater than 20 seconds)
CTV, Mirroring, and Casting
For apps native to the OTT device (i.e. downloading and viewing a streaming app to an Apple TV), audit ping should fire from the OTT device, and Viewing data should reside in OTT Viewing file.
For mirroring, where video playback occurs on the mobile device and OTT device, only one Viewing file row is necessary where, if possible to determine, set: "secondscr":"MIR"
and include in respective mobile platform Viewing file.
For a casting scenario where content is controlled via the mobile device, but displayed only on the OTT device such as an AppleTV or Chromecast, an audit ping must fire from the mobile device before the casting occurs and at the end of playback from the mobile device only. Viewing data resides in the respective mobile platform Viewing file.
{...
"sessionid":"ABC",
"streamid":"DEF",
"position":[
{
"referencestart":"xxxxxxx123",
"referenceend":"xxxxxxx183",
"playheadstart":"0",
"playheadend":"60"
},
{
"referencestart":"xxxxxxx243",
"referenceend":"xxxxxxx303",
"playheadstart":"120",
"playheadend":"180"
}
]
}
{...
"sessionid":"ABC",
"streamid":"DEF",
"position":[
{
"referencestart":"xxxxxxx183",
"referenceend":"xxxxxxx243",
"playheadstart":"60",
"playheadend":"120"
}
],
"secondscr":"OTT"
}
Schema Parameter Definitions
Parameter | Description | Required | Format / Example | |
---|---|---|---|---|
apn | Application name | Yes |
Format: alphanumeric Example:
| |
apv | Application version | Yes |
Format: alphanumeric Example:
| |
sessionid | Unique, client generated value that represents the start of a user session. "Session" is defined as continuous (flexible) interaction with an application that may span multiple streams. | Yes |
Format: alphanumeric Example: Random GUID:
| |
streamid | ID for every new instance of exposure to a different asset | Yes, if no sessionid |
Format: alphanumeric Example: Random GUID:
| |
streamended | Stream is known to have ended in this file | Yes |
Format: integer Example:
| |
publisher_user_id | Publisher-specific user ID (must remain persistent indefinitely) | No |
Format: alphanumeric Example: Salted, hashed user ID:
| |
provider_user_id | Provider-specific user ID (must remain persistent indefinitely) | No |
Format: alphanumeric Example: Salted, hashed user ID:
| |
assetid | In-house id used for a video asset (TMS ID if available) | Yes |
Format: alphanumeric Example:
| |
ad_load_flag | linear or dynamic ad load | Yes |
Format: integer;
| |
ad_support_flag | Intended method of monetizing the content | Yes |
Format: integer;
Note: set to " | |
position | Array of contiguous content viewing.
For viewing gaps < than 1 second, the gap can be smoothed over See below for additional details on position array parameters |
Yes |
Format: "position": [{
"referencestart":"[timestamp]",
"referenceend":"[timestamp]"
"playheadstart":"[playhead position]",
"playheadend":"[playhead position]"
}]
| |
{ | referencestart | Wall clock reference start time | Yes |
Format: Unix timestamp in 32-bit unsigned int in seconds Example:
|
referenceend | Wall clock reference end time | Yes |
Format: Unix timestamp in 32-bit unsigned int in seconds Example:
| |
playheadstart | Content position start time | Yes |
Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD) Example:
| |
} | playheadend | Content position end time | Yes |
Format: Unix timestamp in 32-bit unsigned int in seconds or integer indexed from 0 (typical for VOD) Example:
|
viewedads | Array of ads viewed by client.
See below for additional details on position array parameters |
Yes |
Format: "viewedads":
[
{
"adpod":"0",
"adposition":"0",
"adid":"0",
"isdarid":"0",
"adstart":"utc",
"adend":"utc",
"advisible":"0",
"adfocus":"0",
"adaudio":"0"
}
]
| |
{ | adpod | AdPod sequence number.
Increment for each AdPod. If the same AdPod is played out twice (due to rewind), still increment the AdPod sequence to reflect the sequence the AdPods are played. |
Yes |
Format: Integer Example:
|
adposition | Ad sequence number.
Increment each time a new Ad is encountered. If the same Ad is played out twice (due to rewind), still increment the Ad sequence to reflect the sequence the Ads are played |
Yes |
Format: Integer Example:
| |
adid | The unique identifier for this Ad | No |
Format: alphanumeric In-house AdId, Industry AdID, AdNetwork ID or DAR placement ID | |
isdarid | Is the AdId being passed a Nielsen DAR placement ID | Required if AdID |
Format: integer
| |
adstart | Wall clock reference start time | Yes |
Format: Unix timestamp in 32-bit unsigned int in seconds | |
} | adend | Wall clock reference end time | Yes |
Format: Unix timestamp in 32-bit unsigned int in seconds |
device_id | Mobile Ad ID (IDFA, ADID), Connected Device ID | Yes,if
available |
A487421B-XXXX-YYYY-8343-E3BBB66E44F2
| |
hem_sha256 | SHA-256 hashed email
Note: email normalization rules applied before hashing |
Strongly Preferred | 55C06A30DAA5D5F382FDEB8C702EC57875CC9D91A7C78BB620053FD81DC…
| |
luid | Living Unit ID - Experian Household ID | Yes, for CTV if available | B0EOFEDgD
| |
uoo | User opt out flag for demographic measurement | Yes |
Format: integer
| |
xdua | Device HTTP User Agent string | Yes |
Format: alphanumeric, Example:
| |
xff | IP address | Yes |
Format: xxx.xxx.xxx.xxx | |
psudo_id_sha256 | Hashed Device User Agent string + IP address | No | 421c76d77563afa1914846b010bd164f395bd34c2102e5e99e0cb9cf173…
| |
The following 4 parameters become mandatory if Device User Agent String (UAS) is not available | ||||
device_platform | Device platform(mobile, desktop, connected device) | Required if no UAS | DSK , MBL , OTT
| |
device_type | Device type for connected devices | Required if no UAS | AMN , APL , DVD , GGL , PSX , RKU , STB , STV , XBX
| |
os_group | Operating system of mobile devices. All other device should be NA | Required if no UAS | IOS , DROID , NA
| |
device_group | Type of device: phone, tablet, desktop, set top box (CTV or OTT), unknown | Required if no UAS | DSK , PHN , TAB , STV , DVD , PMP , OTHER , STB , XBX , PSX , AMN , APL , GGL , RKU , UNWN
| |
The following 4 parameters become mandatory if IP Address is not available | ||||
robotic_flag | Flag indicating IAB bot rule if IP address present in IAB bot list | Required if no IP | Format: integer
| |
zip_code | ZIP code where viewing occurred | Required if no IP | 10001
| |
country | Country ISO 3166 ALPHA-2 | Required if no IP | US , CA , etc.
|
Note: All parameters are case sensitive.