Public
Edited
Jan 7, 2023
Insert cell
Insert cell
url = "https://mastodon.social/@michael_nielsen/109627682818668089"
Insert cell
async function getContext(url) {
const instance = url.split('@')[0]
const postId = url.split('/').slice(-1)[0]
const apiUrl = `${instance}api/v1/statuses/${postId}/context`
const data = await d3.json(apiUrl)
return data
}
Insert cell
context = getContext(url)
Insert cell
Inputs.table(context.descendants)
Insert cell
async function repliesByInstance(url, context) {
let instances = {}
const origin = url.split('@')[0]
instances[origin] = context.descendants.length
context.descendants.map(d => {
const instance = d.url.split('@')[0]
if (!Object.keys(instances).includes(instance)) {
const replies = getAncestorReplies(d.url, url)
replies.then(
const r = replies
instances[instance] = r
)
}
})
// const unique = [... new Set(context.descendants.map(i => i.account.url.split('@')[0]))].forEach((i) => instances[i] = null)
return instances
}
Insert cell
async function getAncestorReplies(url, targetAncestor) {
let replies
const ctx = await getContext(url)
const ancestors = await ctx.ancestors
ancestors.forEach(a => {
if (url == targetAncestor) {
replies = a.replies_count
}
})
return replies
}
Insert cell
repliesByInstance(url, context)
Insert cell
ctx = getContext('https://anarchism.space/@abdullahkhalids/109630926348595615')
Insert cell
{
let replies
ctx.ancestors.forEach(a => {
if (a.url == url) {
replies = a.replies_count
}
})
return replies
}
Insert cell
url
Insert cell
ctx.ancestors[0].url == url
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more