embulk-parser-twitter_ads_stats 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 93219dadb40ae3f94d32c5eddad58f1a8b4d94b6
4
- data.tar.gz: 5a204dfced19354a50327532c32aef666f0533dc
3
+ metadata.gz: e69b0390b7c28349313aaebf2524b549ab16c9d6
4
+ data.tar.gz: bf8dd7e7a60dda0a5953e3010a1c0981e95aac4e
5
5
  SHA512:
6
- metadata.gz: cc52f765282f057a53ea9c89a323c1614b8c4b96adffde596eb910a329bad316fa8f67c8462edbdc37ab0579b47c43d9c20d81bce70a849c1afc1f72f6284629
7
- data.tar.gz: a478b63c6530108db5a57a2c718a716189b17ef79b285b7239877b5a7d94b0d49641676dd8633cd661319168704f16d7d759191c193ff1706aa8e11465bda217
6
+ metadata.gz: b4b04c28a0e215d3a04c52ae8111f1a1ca41429f8363bf3048a5cadf655729453f32da3102e812034b6b105cc40ee0a4acb82f90d8a8e550254fa86995bc9649
7
+ data.tar.gz: efce4bd51917e7f461607ce8f22881b5514a44a2045c18d1738d57496a5bf155630b4ea9e63512d193c7300154edabb97ff44dd90b5c2ead638dd7182463b8b1
data/README.md CHANGED
@@ -43,7 +43,7 @@ in:
43
43
  *************************** 1 ***************************
44
44
  id (string) : xxxxx
45
45
  date (string) : 2017-08-20
46
- segment (string) :
46
+ segment ( json) :
47
47
  placement (string) : ALL_ON_TWITTER
48
48
  billing ( json) : {"billed_charge_local_micro":100000000000,"billed_engagements":100}
49
49
  engagement ( json) : {"likes":1,"engagements":1,"app_clicks":100,"clicks":100,"card_engagements":100,"qualified_impressions":null,"retweets":1,"impressions":1,"follows":1,"replies":1,"url_clicks":1}
@@ -54,7 +54,7 @@ mobile_conversion ( json) : {"mobile_conversion_rates_order_quantity":null,"mob
54
54
  *************************** 2 ***************************
55
55
  id (string) : xxxxx
56
56
  date (string) : 2017-08-21
57
- segment (string) :
57
+ segment ( json) : {"segment_name":"hoge","segment_value":"fuga"}
58
58
  placement (string) : ALL_ON_TWITTER
59
59
  billing ( json) : {"billed_charge_local_micro":200000000000,"billed_engagements":200}
60
60
  engagement ( json) : {"likes":2,"engagements":2,"app_clicks":200,"clicks":200,"card_engagements":200,"qualified_impressions":null,"retweets":2,"impressions":2,"follows":2,"replies":2,"url_clicks":2}
@@ -13,7 +13,7 @@ configurations {
13
13
  provided
14
14
  }
15
15
 
16
- version = "0.1.3"
16
+ version = "0.1.4"
17
17
 
18
18
  sourceCompatibility = 1.7
19
19
  targetCompatibility = 1.7
@@ -27,7 +27,7 @@ object Column {
27
27
  val baseColumns = Seq(
28
28
  new EmbulkColumn(0, "id", Types.STRING),
29
29
  new EmbulkColumn(1, "date", Types.STRING),
30
- new EmbulkColumn(2, "segment", Types.STRING),
30
+ new EmbulkColumn(2, "segment", Types.JSON),
31
31
  new EmbulkColumn(3, "placement", Types.STRING)
32
32
  )
33
33
 
@@ -43,7 +43,7 @@ object Column {
43
43
  case class Column(
44
44
  id: String,
45
45
  date: LocalDate,
46
- segment: Option[String],
46
+ segment: Option[Segment],
47
47
  placement: String,
48
48
  metricsGroup: Map[String, MetricsGroup]
49
49
  )
@@ -0,0 +1,16 @@
1
+ package org.embulk.parser.twitter_ads_stats
2
+
3
+ import spray.json.DefaultJsonProtocol._
4
+ import spray.json._
5
+
6
+ object SegmentJson {
7
+ implicit object SegmentJsonWriter extends RootJsonWriter[Segment] {
8
+
9
+ private def toJValue(element: String): JsValue = element.toJson
10
+
11
+ override def write(obj: Segment): JsValue = {
12
+ val jsFields = obj.map(v => (v._1, toJValue(v._2)))
13
+ JsObject(jsFields)
14
+ }
15
+ }
16
+ }
@@ -10,6 +10,7 @@ import spray.json.{pimpAny, pimpString}
10
10
  import scala.util.control.NonFatal
11
11
  import scala.collection.JavaConverters._
12
12
  import MetricsGroupJson._
13
+ import SegmentJson._
13
14
  import org.embulk.parser.twitter_ads_stats.define.{Root, RootJson}
14
15
 
15
16
  class TwitterAdsStatsParserPlugin extends ParserPlugin {
@@ -57,7 +58,7 @@ class TwitterAdsStatsParserPlugin extends ParserPlugin {
57
58
  case (Column(_, date, _, _, _), "date") =>
58
59
  pb.setString(embulkColumn, date.toString)
59
60
  case (Column(_, _, Some(segment), _, _), "segment") =>
60
- pb.setString(embulkColumn, segment)
61
+ pb.setJson(embulkColumn, jsonParser.parse(segment.toJson.compactPrint))
61
62
  case (Column(_, _, None, _, _), "segment") =>
62
63
  pb.setNull(embulkColumn)
63
64
  case (Column(_, _, _, placement, _), "placement") =>
@@ -4,7 +4,7 @@ import java.time.LocalDate
4
4
 
5
5
  import org.embulk.parser.twitter_ads_stats._
6
6
 
7
- case class IDData(metrics: Metrics, segment: Option[String]) {
7
+ case class IDData(metrics: Metrics, segment: Option[Segment]) {
8
8
  private def resolveColumn(
9
9
  id: String,
10
10
  metricElementNames: MetricElementNames,
@@ -13,7 +13,8 @@ object Request {
13
13
  case class Params(
14
14
  start_time: StatsDateTime,
15
15
  end_time: StatsDateTime,
16
- placement: String
16
+ placement: String,
17
+ segmentation_type: Option[String]
17
18
  ) {
18
19
  require(!start_time.isAfter(end_time))
19
20
  require(start_time.isSameOffsetTime(end_time))
@@ -1,6 +1,6 @@
1
1
  package org.embulk.parser.twitter_ads_stats.define
2
2
 
3
- import org.embulk.parser.twitter_ads_stats.{MetricElementNames, MetricTimeSeries}
3
+ import org.embulk.parser.twitter_ads_stats.{MetricElementNames, MetricTimeSeries, Segment}
4
4
  import spray.json.{DefaultJsonProtocol, DeserializationException, JsArray, JsString, JsValue, RootJsonReader}
5
5
 
6
6
  class RootJson(metricElementNames: MetricElementNames) extends DefaultJsonProtocol {
@@ -36,7 +36,7 @@ class RootJson(metricElementNames: MetricElementNames) extends DefaultJsonProtoc
36
36
  case Seq(a: JsValue, b) =>
37
37
  IDData(
38
38
  MetricsReader.read(a.asJsObject),
39
- b.convertTo[Option[String]]
39
+ b.convertTo[Option[Segment]]
40
40
  )
41
41
  case x => throw DeserializationException(msg = s"id_data can't deserialize json: $x", fieldNames = fieldNames)
42
42
  }
@@ -64,11 +64,12 @@ class RootJson(metricElementNames: MetricElementNames) extends DefaultJsonProtoc
64
64
  override def read(json: JsValue): Params = {
65
65
  val fieldNames = Params.fieldNames.toList
66
66
  json.asJsObject.getFields(fieldNames: _*) match {
67
- case Seq(JsString(a), JsString(b), c) =>
67
+ case Seq(JsString(a), JsString(b), c, segmentationType) =>
68
68
  Params(
69
69
  StatsDateTime(a),
70
70
  StatsDateTime(b),
71
- c.convertTo[String]
71
+ c.convertTo[String],
72
+ segmentationType.convertTo[Option[String]]
72
73
  )
73
74
  case x => throw DeserializationException(msg = s"params can't deserialize json: $x", fieldNames = fieldNames)
74
75
  }
@@ -3,6 +3,7 @@ package org.embulk.parser
3
3
  package object twitter_ads_stats {
4
4
  type MetricTimeSeries = Option[Vector[Long]]
5
5
  type MetricsGroup = Map[String, Option[Long]]
6
+ type Segment = Map[String, String]
6
7
 
7
8
  val metricElementNames = MetricElementNames(
8
9
  Map(
@@ -22,10 +22,10 @@ class ColumnSpec extends UnitSpec {
22
22
  val expected = Seq(
23
23
  new EmbulkColumn(0, "id", Types.STRING),
24
24
  new EmbulkColumn(1, "date", Types.STRING),
25
- new EmbulkColumn(2, "segment", Types.STRING),
25
+ new EmbulkColumn(2, "segment", Types.JSON),
26
26
  new EmbulkColumn(3, "placement", Types.STRING),
27
27
  new EmbulkColumn(4, "billing", Types.JSON),
28
- new EmbulkColumn(5, "video", Types.JSON),
28
+ new EmbulkColumn(5, "video", Types.JSON)
29
29
  )
30
30
 
31
31
  assert(actual == expected)
@@ -0,0 +1,19 @@
1
+ package org.embulk.parser.twitter_ads_stats
2
+
3
+ import spray.json.{pimpAny, JsObject, JsString}
4
+
5
+ class SegmentJsonSpec extends UnitSpec {
6
+ "json write" in {
7
+ import SegmentJson._
8
+
9
+ val v: Segment = Map("segment_name" -> "hoge", "segment_value" -> "fuga")
10
+
11
+ val actual = v.toJson
12
+
13
+ val expected = JsObject(
14
+ "segment_name" -> JsString("hoge"),
15
+ "segment_value" -> JsString("fuga")
16
+ )
17
+ assert(actual == expected)
18
+ }
19
+ }
@@ -6,7 +6,7 @@ import org.embulk.parser.twitter_ads_stats.UnitSpec
6
6
 
7
7
  class ParamsSpec extends UnitSpec {
8
8
  "開始日~(終了日-1)の日程を取得する" in {
9
- val period = Params(StatsDateTime("2016-12-31T15:00:00Z"), StatsDateTime("2017-01-03T15:00:00Z"), "")
9
+ val period = Params(StatsDateTime("2016-12-31T15:00:00Z"), StatsDateTime("2017-01-03T15:00:00Z"), "", None)
10
10
  val actual = period.targetDates
11
11
  val expected = List(
12
12
  LocalDate.of(2017, 1, 1),
@@ -16,7 +16,7 @@ class ParamsSpec extends UnitSpec {
16
16
  assert(actual == expected)
17
17
  }
18
18
  "開始日から終了日までの全日程は、開始日から終了日が同一な場合は同一な日程となる" in {
19
- val period = Params(StatsDateTime("2016-12-31T15:00:00Z"), StatsDateTime("2017-01-01T15:00:00Z"), "")
19
+ val period = Params(StatsDateTime("2016-12-31T15:00:00Z"), StatsDateTime("2017-01-01T15:00:00Z"), "", None)
20
20
  val actual = period.targetDates
21
21
  val expected = List(
22
22
  LocalDate.of(2017, 1, 1)
@@ -177,7 +177,8 @@ class RootSpec extends UnitSpec {
177
177
  params = Params(
178
178
  start_time = StatsDateTime("2017-01-01T01:01:01Z"),
179
179
  end_time = StatsDateTime("2017-01-04T01:01:01Z"),
180
- placement = ""
180
+ placement = "",
181
+ segmentation_type = None
181
182
  )
182
183
  )
183
184
  ).resolveColumns(metricElementNames)
@@ -203,7 +204,8 @@ class RootSpec extends UnitSpec {
203
204
  params = Params(
204
205
  start_time = StatsDateTime("2017-01-01T01:01:01Z"),
205
206
  end_time = StatsDateTime("2017-01-01T01:01:01Z"),
206
- placement = ""
207
+ placement = "",
208
+ segmentation_type = None
207
209
  )
208
210
  )
209
211
  ).resolveColumns(names)
@@ -267,7 +269,8 @@ object RootSpec {
267
269
  params = Params(
268
270
  start_time = StatsDateTime("2017-01-01T01:01:01Z"),
269
271
  end_time = StatsDateTime("2017-01-03T01:01:01Z"),
270
- placement = ""
272
+ placement = "",
273
+ segmentation_type = None
271
274
  )
272
275
  )
273
276
  )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-parser-twitter_ads_stats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - kimutyam
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-18 00:00:00.000000000 Z
11
+ date: 2018-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -67,6 +67,7 @@ files:
67
67
  - src/main/scala/org/embulk/parser/twitter_ads_stats/MetricsGroupJson.scala
68
68
  - src/main/scala/org/embulk/parser/twitter_ads_stats/ParseException.scala
69
69
  - src/main/scala/org/embulk/parser/twitter_ads_stats/PluginTask.scala
70
+ - src/main/scala/org/embulk/parser/twitter_ads_stats/SegmentJson.scala
70
71
  - src/main/scala/org/embulk/parser/twitter_ads_stats/TwitterAdsStatsParserPlugin.scala
71
72
  - src/main/scala/org/embulk/parser/twitter_ads_stats/define/Data.scala
72
73
  - src/main/scala/org/embulk/parser/twitter_ads_stats/define/FieldNameUtil.scala
@@ -81,13 +82,14 @@ files:
81
82
  - src/test/scala/org/embulk/parser/twitter_ads_stats/ColumnSpec.scala
82
83
  - src/test/scala/org/embulk/parser/twitter_ads_stats/MetricElementNamesSpec.scala
83
84
  - src/test/scala/org/embulk/parser/twitter_ads_stats/MetricsGroupJsonSpec.scala
85
+ - src/test/scala/org/embulk/parser/twitter_ads_stats/SegmentJsonSpec.scala
84
86
  - src/test/scala/org/embulk/parser/twitter_ads_stats/UnitSpec.scala
85
87
  - src/test/scala/org/embulk/parser/twitter_ads_stats/define/MetricsJsonSpec.scala
86
88
  - src/test/scala/org/embulk/parser/twitter_ads_stats/define/ParamsSpec.scala
87
89
  - src/test/scala/org/embulk/parser/twitter_ads_stats/define/RootJsonSpec.scala
88
90
  - src/test/scala/org/embulk/parser/twitter_ads_stats/define/RootSpec.scala
89
91
  - src/test/scala/org/embulk/parser/twitter_ads_stats/define/StatsDateTimeSpec.scala
90
- - classpath/embulk-parser-twitter_ads_stats-0.1.3.jar
92
+ - classpath/embulk-parser-twitter_ads_stats-0.1.4.jar
91
93
  - classpath/scala-library-2.12.3.jar
92
94
  - classpath/spray-json_2.12-1.3.3.jar
93
95
  homepage: https://github.com/septeni-original/embulk-parser-twitter_ads_stats