scribe/src/clients/medium_client.cr

66 lines
1.5 KiB
Crystal
Raw Normal View History

require "json"
class MediumClient
2021-05-15 23:05:28 +02:00
def self.post_data(post_id : String) : PostResponse::Root
client = HTTP::Client.new("medium.com", tls: true)
2021-05-15 23:05:28 +02:00
response = client.post("/_/graphql", headers: headers, body: body(post_id))
PostResponse::Root.from_json(response.body)
end
private def self.headers : HTTP::Headers
HTTP::Headers{
"Accept" => "application/json",
"Content-Type" => "application/json; charset=utf-8",
}
end
private def self.body(post_id : String) : String
query = <<-GRAPHQL
query {
post(id: "#{post_id}") {
title
creator {
id
name
}
content {
bodyModel {
paragraphs {
text
type
2021-08-29 19:02:56 +02:00
href
layout
markups {
2021-08-29 19:02:56 +02:00
title
type
href
2021-07-04 23:37:45 +02:00
userId
start
end
2021-08-29 19:02:56 +02:00
anchorType
}
iframe {
mediaResource {
href
}
}
metadata {
id
originalWidth
originalHeight
}
}
}
}
}
}
GRAPHQL
JSON.build do |json|
json.object do
json.field "query", query
json.field "variables", {} of String => String
end
end
end
end