From 8d87ee3ed767aa65ffe48c60af0a1916e5d37e3a Mon Sep 17 00:00:00 2001 From: ruidajo Date: Mon, 18 Apr 2022 17:29:09 -0500 Subject: [PATCH] Creating replies and retweets filtering and modifying histograms. --- .../exportRepliesHistogramWithBars..st | 29 +++++++++++++++++++ .../exportTweetsHistogramWithBars..st | 6 ++-- .../NitterUser.class/instance/replies.st | 7 +++++ .../NitterUser.class/instance/retweets.st | 7 +++++ .../NitterUser.class/instance/tweets.st | 2 +- .../Tweet.class/instance/created.st | 5 ++-- .../instance/ifEmpty..st | 9 ++++++ .../instance/isEmpty.st | 5 ++++ 8 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 Socialmetrica.package/NitterUser.class/instance/exportRepliesHistogramWithBars..st create mode 100644 Socialmetrica.package/NitterUser.class/instance/replies.st create mode 100644 Socialmetrica.package/NitterUser.class/instance/retweets.st create mode 100644 Socialmetrica.package/TweetsCollection.class/instance/ifEmpty..st create mode 100644 Socialmetrica.package/TweetsCollection.class/instance/isEmpty.st diff --git a/Socialmetrica.package/NitterUser.class/instance/exportRepliesHistogramWithBars..st b/Socialmetrica.package/NitterUser.class/instance/exportRepliesHistogramWithBars..st new file mode 100644 index 0000000..ce4f27d --- /dev/null +++ b/Socialmetrica.package/NitterUser.class/instance/exportRepliesHistogramWithBars..st @@ -0,0 +1,29 @@ +accessing +exportRepliesHistogramWithBars: aNumberOfBars + + | tweetsByTimeSpan subtotals repliesColor x tweetsHistogram diagram | + + tweetsByTimeSpan := self collectMessages: [ self replies ] byTimeSpanSplits: aNumberOfBars. + subtotals := tweetsByTimeSpan values collect: [ :collection | collection size ]. + repliesColor := (Color r:(246/255) g:(185/255) b:(46/255)). + x := 1 to: subtotals size. + tweetsHistogram := RSChart new. + tweetsHistogram extent: 800@200. + diagram := RSBarPlot new x: x y:subtotals. + diagram color: repliesColor. + tweetsHistogram addPlot: diagram. + tweetsHistogram addDecoration: (RSHorizontalTick new + fromNames: tweetsByTimeSpan keys; + labelRotation: 0; + fontSize: 80 /aNumberOfBars; + yourself). + tweetsHistogram addDecoration: (RSVerticalTick new + integer; + fontSize: 80 /aNumberOfBars). + tweetsHistogram build. + tweetsHistogram canvas pngExporter + zoomToShapes; + noFixedShapes; + fileName: (self folder / 'replies-histogram.png')fullName; + export. + ^ self folder / 'replies-histogram.png' \ No newline at end of file diff --git a/Socialmetrica.package/NitterUser.class/instance/exportTweetsHistogramWithBars..st b/Socialmetrica.package/NitterUser.class/instance/exportTweetsHistogramWithBars..st index cc59c6b..fafc3b2 100644 --- a/Socialmetrica.package/NitterUser.class/instance/exportTweetsHistogramWithBars..st +++ b/Socialmetrica.package/NitterUser.class/instance/exportTweetsHistogramWithBars..st @@ -21,9 +21,9 @@ exportTweetsHistogramWithBars: aNumberOfBars integer; fontSize: 80 /aNumberOfBars). tweetsHistogram build. - tweetsHistogram canvas pdfExporter + tweetsHistogram canvas pngExporter zoomToShapes; noFixedShapes; - fileName: (self folder / 'trinos.pdf')fullName; + fileName: (self folder / 'tweets-histogram.png')fullName; export. - ^ self folder / 'trinos.pdf' \ No newline at end of file + ^ self folder / 'tweets-histogram.png' \ No newline at end of file diff --git a/Socialmetrica.package/NitterUser.class/instance/replies.st b/Socialmetrica.package/NitterUser.class/instance/replies.st new file mode 100644 index 0000000..138fedc --- /dev/null +++ b/Socialmetrica.package/NitterUser.class/instance/replies.st @@ -0,0 +1,7 @@ +accessing +replies + + self messages ifEmpty: [ self getMessages ]. + ^ TweetsCollection new + messages: (self messages messages select: [ :each | (each metadata at: 'replie to') isNotEmpty ]); + yourself \ No newline at end of file diff --git a/Socialmetrica.package/NitterUser.class/instance/retweets.st b/Socialmetrica.package/NitterUser.class/instance/retweets.st new file mode 100644 index 0000000..3ba3e1e --- /dev/null +++ b/Socialmetrica.package/NitterUser.class/instance/retweets.st @@ -0,0 +1,7 @@ +accessing +retweets + + self messages ifEmpty: [ self getMessages ]. + ^ TweetsCollection new + messages: (self messages messages select: [ :each | each authorId ~= self id]); + yourself \ No newline at end of file diff --git a/Socialmetrica.package/NitterUser.class/instance/tweets.st b/Socialmetrica.package/NitterUser.class/instance/tweets.st index e99116f..342bf3a 100644 --- a/Socialmetrica.package/NitterUser.class/instance/tweets.st +++ b/Socialmetrica.package/NitterUser.class/instance/tweets.st @@ -1,6 +1,6 @@ accessing tweets - self messages messages ifEmpty: [ self getMessages ]. + self messages ifEmpty: [ self getMessages ]. ^ TweetsCollection new messages: (self messages messages select: [ :each | each authorId = self id ]); yourself \ No newline at end of file diff --git a/Socialmetrica.package/Tweet.class/instance/created.st b/Socialmetrica.package/Tweet.class/instance/created.st index 23c25e2..9c3e0a0 100644 --- a/Socialmetrica.package/Tweet.class/instance/created.st +++ b/Socialmetrica.package/Tweet.class/instance/created.st @@ -1,4 +1,5 @@ accessing created - (created endsWith: 'GMT') ifTrue: [ ^ DateAndTime fromString: ((created splitOn: $,) second withoutSuffix: 'GMT') ]. - ^ DateAndTime fromString: created \ No newline at end of file + created class = DateAndTime ifTrue: [ ^ created ]. + ^ (created endsWith: 'GMT') ifTrue: [ ^ DateAndTime fromString: ((created splitOn: $,) second withoutSuffix: 'GMT') ]. + "^ DateAndTime fromString: created" \ No newline at end of file diff --git a/Socialmetrica.package/TweetsCollection.class/instance/ifEmpty..st b/Socialmetrica.package/TweetsCollection.class/instance/ifEmpty..st new file mode 100644 index 0000000..7b535ff --- /dev/null +++ b/Socialmetrica.package/TweetsCollection.class/instance/ifEmpty..st @@ -0,0 +1,9 @@ +accessing +ifEmpty: aBlock + "Evaluate the given block, answering its value if the receiver is empty, otherwise answer the receiver." + + "Note that the fact that this method returns its receiver in case the receiver is not empty allows one to write expressions like the following ones: self classifyMethodAs: (myProtocol ifEmpty: ['As yet unclassified'])" + + ^ self isEmpty + ifTrue: [ aBlock value ] + ifFalse: [ self ] \ No newline at end of file diff --git a/Socialmetrica.package/TweetsCollection.class/instance/isEmpty.st b/Socialmetrica.package/TweetsCollection.class/instance/isEmpty.st new file mode 100644 index 0000000..b98b686 --- /dev/null +++ b/Socialmetrica.package/TweetsCollection.class/instance/isEmpty.st @@ -0,0 +1,5 @@ +accessing +isEmpty + "Answer whether the receiver contains any elements." + + ^self size = 0 \ No newline at end of file