diff options
author | Kazuki Yamaguchi <k@rhe.jp> | 2017-10-22 23:12:44 +0900 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2017-10-22 23:12:44 +0900 |
commit | 0b16b186751aca2a6000e5bc949e8511b91c0dfd (patch) | |
tree | f5d0a56a7292591c173031eda19a61a52ec12533 /app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt | |
parent | 565d3ddf03098be859594f2d6c3ca452c7738d4f (diff) | |
download | SmileEssence-0b16b186751aca2a6000e5bc949e8511b91c0dfd.tar.gz |
data simplification
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt')
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt b/app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt new file mode 100644 index 00000000..c5437154 --- /dev/null +++ b/app/src/main/java/net/lacolaco/smileessence/entity/Entities.kt @@ -0,0 +1,55 @@ +package net.lacolaco.smileessence.entity + +import twitter4j.* + +import java.util.* + +class Entities private constructor( + val mentions: List<String>, + val hashtags: List<String>, + val mediaUrls: List<String>, + val urlsExpanded: List<String>, + val symbols: List<String> +) { + fun extractText(status: twitter4j.EntitySupport, text: String): String { + val set = TreeSet<twitter4j.URLEntity> { a, b -> a.start - b.start } + if (status.urlEntities != null) + set += status.urlEntities + if (status.mediaEntities != null) + set += status.mediaEntities + + return set.fold(text) { t, entity -> + t.replaceFirst(entity.text.toRegex(), entity.displayURL) + } + } + + companion object { + fun fromTwitter(es: twitter4j.EntitySupport) = Entities( + mentions = extractMentions(es.userMentionEntities), + hashtags = extractHashtags(es.hashtagEntities), + mediaUrls = extractMediaUrls(es.mediaEntities), + urlsExpanded = extractExpandedUrls(es.urlEntities), + symbols = extractSymbols(es.symbolEntities) + ) + + private fun extractMentions(entities: Array<UserMentionEntity>?) = + entities?.map { it.screenName } ?: listOf() + + private fun extractSymbols(entities: Array<SymbolEntity>?) = + entities?.map { it.text } ?: listOf() + + private fun extractExpandedUrls(entities: Array<URLEntity>?) = + entities?.map { it.expandedURL } ?: listOf() + + private fun extractMediaUrls(entities: Array<MediaEntity>?) = + entities?.map { + when (it.type) { + "photo" -> it.mediaURLHttps + else -> it.expandedURL + } + } ?: listOf() + + private fun extractHashtags(entities: Array<HashtagEntity>?) = + entities?.map { it.text } ?: listOf() + } +} |