Ciao a tutti!
Mi chiedevo se ci sia un modo, tramite l’API di Discourse, di ottenere l’ID di un post partendo dall’URL canonico di un post, come https://myweb.site/t/<topic_id>/<post_number>, dove ovviamente TN è l’ID/numero del topic e PN è il numero del post.
Ho fatto alcune prove utilizzando i dati del flusso di post da https://myweb.site/t/<topic_id>.json, pensando che, ad esempio, il post numero N corrispondesse all’n-esimo ID di post nei dati post_stream->stream restituiti dalla chiamata. Tuttavia, se sono stati eliminati dei post o sono state effettuate operazioni di divisione nel flusso dei post del topic, il numero del post non corrisponde alla n-esima posizione nello stream.
Avevo un disperato bisogno della stessa funzionalità due anni fa. Ancora non ho scoperto come farlo (più) correttamente. Questo è il mio trucco:
def get_topic_post(topic_id, post_num)
topic = @api.topic(topic_id, {print: true})
post_obj = topic['post_stream']['posts'].find { |p| p['post_number'] == post_num }
if post_obj
post_obj['id']
else
throw "Could not find post #{topic_id}/#{post_num}."
end
end
Questo aggira i problemi menzionati: {print: true} risolve il problema della paginazione. find è necessario perché la moderazione può creare una discrepanza tra gli indici dell’array e i numeri dei post.
Funziona per argomenti delle dimensioni con cui sto lavorando. Tuttavia, un metodo più diretto tramite l’API sarebbe più soddisfacente.