tweet.nim 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import options
  2. import jsony
  3. from json import JsonNode
  4. import user, media, common
  5. type
  6. RawTweet* = object
  7. createdAt*: string
  8. idStr*: string
  9. fullText*: string
  10. displayTextRange*: array[2, int]
  11. entities*: Entities
  12. extendedEntities*: ExtendedEntities
  13. inReplyToStatusIdStr*: string
  14. inReplyToScreenName*: string
  15. userIdStr*: string
  16. isQuoteStatus*: bool
  17. replyCount*: int
  18. retweetCount*: int
  19. favoriteCount*: int
  20. quoteCount*: int
  21. conversationIdStr*: string
  22. favorited*: bool
  23. retweeted*: bool
  24. selfThread*: tuple[idStr: string]
  25. card*: Option[Card]
  26. quotedStatusIdStr*: string
  27. retweetedStatusIdStr*: string
  28. Card* = object
  29. name*: string
  30. url*: string
  31. bindingValues*: JsonNode
  32. Entities* = object
  33. hashtags*: seq[Hashtag]
  34. symbols*: seq[Hashtag]
  35. userMentions*: seq[UserMention]
  36. urls*: seq[Url]
  37. media*: seq[Entity]
  38. Hashtag* = object
  39. indices*: Slice[int]
  40. UserMention* = object
  41. screenName*: string
  42. name*: string
  43. indices*: Slice[int]
  44. ExtendedEntities* = object
  45. media*: seq[Entity]
  46. Entity* = object
  47. kind*: MediaType
  48. indices*: Slice[int]
  49. mediaUrlHttps*: string
  50. url*: string
  51. expandedUrl*: string
  52. videoInfo*: VideoInfo
  53. ext*: Ext
  54. extMediaAvailability*: tuple[status: string]
  55. extAltText*: string
  56. additionalMediaInfo*: AdditionalMediaInfo
  57. sourceStatusIdStr*: string
  58. sourceUserIdStr*: string
  59. AdditionalMediaInfo* = object
  60. sourceUser*: Option[RawUser]
  61. title*: string
  62. description*: string
  63. Ext* = object
  64. mediaStats*: JsonNode
  65. MediaStats* = object
  66. ok*: tuple[viewCount: string]
  67. proc renameHook*(v: var Entity; fieldName: var string) =
  68. if fieldName == "type":
  69. fieldName = "kind"
  70. proc parseHook*(s: string; i: var int; v: var Slice[int]) =
  71. var slice: array[2, int]
  72. parseHook(s, i, slice)
  73. v = slice[0] ..< slice[1]