Da numero di post a ID post

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.

Sto trascurando qualcosa di ovvio?

Hai provato /t/<topic_id>/posts.json? Questo restituirà 20 post e potrai prendere quello al numero post_number, che conterrà un ID del post.

Ma per ottenerne più di 20 avrai bisogno di una paginazione, che al momento non vedo come fare.

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.