diff --git a/samples/IngestAudienceMembers.cs b/samples/IngestAudienceMembers.cs
index 28739e9..79b4522 100644
--- a/samples/IngestAudienceMembers.cs
+++ b/samples/IngestAudienceMembers.cs
@@ -12,6 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+using System.Text.Json;
using CommandLine;
using Google.Ads.DataManager.Util;
using Google.Ads.DataManager.V1;
@@ -22,7 +23,7 @@ namespace Google.Ads.DataManager.Samples
//
// Sends a without using encryption.
//
- // User data is read from a data file. See the audience_members_1.csv file in the
+ // User data is read from a data file. See the audience_members_1.json file in the
// sampledata directory for an example.
//
public class IngestAudienceMembers
@@ -73,11 +74,11 @@ public class Options
public string AudienceId { get; set; } = null!;
[Option(
- "csvFile",
+ "jsonFile",
Required = true,
- HelpText = "Comma-separated file containing user data to ingest"
+ HelpText = "JSON file containing user data to ingest"
)]
- public string CsvFile { get; set; } = null!;
+ public string JsonFile { get; set; } = null!;
[Option(
"validateOnly",
@@ -97,7 +98,7 @@ public void Run(Options options)
options.LinkedAccountType,
options.LinkedAccountId,
options.AudienceId,
- options.CsvFile,
+ options.JsonFile,
options.ValidateOnly
);
}
@@ -111,7 +112,7 @@ private void RunExample(
AccountType? linkedAccountType,
string? linkedAccountId,
string audienceId,
- string csvFile,
+ string jsonFile,
bool validateOnly
)
{
@@ -130,11 +131,8 @@ bool validateOnly
);
}
- // Reads the audience members from the CSV file.
- // Each row of the CSV file should be a single audience member.
- // The first column of each row should be the email address.
- // The second column of each row should be the phone number.
- List memberList = ReadMemberDataFile(csvFile);
+ // Reads the audience members from the JSON file.
+ List memberList = ReadMemberData(jsonFile);
// Creates a factory that will be used to generate the appropriate data manager.
var userDataFormatter = new UserDataFormatter();
@@ -147,7 +145,7 @@ bool validateOnly
var userDataBuilder = new UserData();
// Adds a UserIdentifier for each valid email address for the member.
- foreach (var email in member.EmailAddresses)
+ foreach (var email in member.Emails)
{
try
{
@@ -257,6 +255,9 @@ bool validateOnly
},
};
+ // Logs the request.
+ Console.WriteLine($"Request #{requestCount}:\n{request}");
+
// Sends the data to the Data Manager API.
IngestAudienceMembersResponse response =
ingestionServiceClient.IngestAudienceMembers(request);
@@ -267,66 +268,16 @@ bool validateOnly
private class Member
{
- public List EmailAddresses { get; } = new List();
- public List PhoneNumbers { get; } = new List();
+ public List Emails { get; set; } = new List();
+ public List PhoneNumbers { get; set; } = new List();
}
- private List ReadMemberDataFile(string dataFile)
+ private List ReadMemberData(string jsonFile)
{
- var members = new List();
- using (var reader = new StreamReader(dataFile))
- {
- string? line;
- int lineNumber = 0;
- while ((line = reader.ReadLine()) != null)
- {
- lineNumber++;
- if (line.StartsWith("#"))
- // Skips comment row.
- continue;
-
- // Expected format:
- // email_1,email_2,email_3,phone_1,phone_2,phone_3
- string[] columns = line.Split(',');
- if (columns[0] == "email_1")
- // Skips header row.
- continue;
-
- var member = new Member();
- for (int col = 0; col < columns.Length; col++)
- {
- if (string.IsNullOrWhiteSpace(columns[col]))
- {
- continue;
- }
-
- if (col < 3)
- {
- member.EmailAddresses.Add(columns[col]);
- }
- else if (col < 6)
- {
- member.PhoneNumbers.Add(columns[col]);
- }
- else
- {
- Console.WriteLine($"Ignoring column index {col} in line #{lineNumber}");
- }
- }
-
- if (!member.EmailAddresses.Any() && !member.PhoneNumbers.Any())
- {
- // Skips the row since it contains no user data.
- Console.WriteLine($"Ignoring line {lineNumber}. No data.");
- }
- else
- {
- // Adds the parsed user data to the list.
- members.Add(member);
- }
- }
- }
- return members;
+ string jsonString = File.ReadAllText(jsonFile);
+ var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
+ return JsonSerializer.Deserialize>(jsonString, options)
+ ?? new List();
}
}
}
diff --git a/samples/sampledata/audience_members_1.csv b/samples/sampledata/audience_members_1.csv
deleted file mode 100644
index bdb6b60..0000000
--- a/samples/sampledata/audience_members_1.csv
+++ /dev/null
@@ -1,5 +0,0 @@
-email_1,email_2,email_3,phone_1,phone_2,phone_3
-dana@example.com,DanaM@example.com,,,,
-ALEXF@example.com, AlexF@cymbalgroup.com,alexF@altostrat.com,+1-800‑555‑0100,+1 800‑555‑0101,+1 800‑555‑0102
-quinn@CYMBALGROUP.com, baklavainthebalkans@gmail.com ,,,,
-rosario@example.org,cloudySanFrancisco@GMAIL.com,,+1-800‑555‑0110,,
diff --git a/samples/sampledata/audience_members_1.json b/samples/sampledata/audience_members_1.json
new file mode 100644
index 0000000..f40064d
--- /dev/null
+++ b/samples/sampledata/audience_members_1.json
@@ -0,0 +1,35 @@
+[
+ {
+ "emails": [
+ "dana@example.com",
+ "DanaM@example.com"
+ ]
+ },
+ {
+ "emails": [
+ "ALEXF@example.com",
+ "AlexF@cymbalgroup.com",
+ "alexF@altostrat.com"
+ ],
+ "phoneNumbers": [
+ "+1-800-555-0100",
+ "+1 800-555-0101",
+ "+1 800-555-0102"
+ ]
+ },
+ {
+ "emails": [
+ "quinn@CYMBALGROUP.com",
+ "baklavainthebalkans@gmail.com"
+ ]
+ },
+ {
+ "emails": [
+ "rosario@example.org",
+ "cloudySanFrancisco@GMAIL.com"
+ ],
+ "phoneNumbers": [
+ "+1-800-555-0110"
+ ]
+ }
+]