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 +4 -4
- data/README.md +2 -2
- data/build.gradle +1 -1
- data/src/main/scala/org/embulk/parser/twitter_ads_stats/Column.scala +2 -2
- data/src/main/scala/org/embulk/parser/twitter_ads_stats/SegmentJson.scala +16 -0
- data/src/main/scala/org/embulk/parser/twitter_ads_stats/TwitterAdsStatsParserPlugin.scala +2 -1
- data/src/main/scala/org/embulk/parser/twitter_ads_stats/define/IDData.scala +1 -1
- data/src/main/scala/org/embulk/parser/twitter_ads_stats/define/Request.scala +2 -1
- data/src/main/scala/org/embulk/parser/twitter_ads_stats/define/RootJson.scala +5 -4
- data/src/main/scala/org/embulk/parser/twitter_ads_stats/package.scala +1 -0
- data/src/test/scala/org/embulk/parser/twitter_ads_stats/ColumnSpec.scala +2 -2
- data/src/test/scala/org/embulk/parser/twitter_ads_stats/SegmentJsonSpec.scala +19 -0
- data/src/test/scala/org/embulk/parser/twitter_ads_stats/define/ParamsSpec.scala +2 -2
- data/src/test/scala/org/embulk/parser/twitter_ads_stats/define/RootSpec.scala +6 -3
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e69b0390b7c28349313aaebf2524b549ab16c9d6
|
4
|
+
data.tar.gz: bf8dd7e7a60dda0a5953e3010a1c0981e95aac4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 (
|
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 (
|
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}
|
data/build.gradle
CHANGED
@@ -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.
|
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[
|
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.
|
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[
|
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[
|
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
|
}
|
@@ -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.
|
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.
|
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-
|
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.
|
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
|