私はRubyとHTTPartyを使ってWikiaのフォーラムに投稿しようとしています。このプロセスにはWikiaの内部APIが含まれているように思われるため、ドキュメントはありません。そのため、Chromeの開発ツールを使用してリクエストを確認しようとしています。HTTPartyとRubyを使ってWikiaのフォーラムに投稿する
私の知る限り、ユーザーはフォーラムでスレッドにコメントを投稿しようとしたときに、POSTリクエストが次のパラメータで.wikia.com/wikia.phpに送信されます。
- コントローラ= WallExternal
- 方法= replyToMessage
- 親=(親スレッドID、例えば1036301)
- トークン= edittoken * "のメッセージが送信される" =
- 体0
このプロセスには、通常のMediawiki APIを使用して取得する編集トークンが必要です。私が遭遇した問題は、
の回答を得ることです。
"ログインセッションに問題があるようですが、この操作はセッションハイジャックの予防策としてキャンセルされています。そのページを再試行してください。
エラーメッセージを使用したGoogleの検索では、通常ログインしようとしている人が表示されますが、これはこの状況では問題ではありません。
匿名の編集者が回答を投稿できるとは考えていないので、ユーザーのヘッダーがリクエストに設定されていないという問題が考えられました。 Mediawikiの文書では、ログインしていないユーザは "+ \"の編集トークンを取得するので、そうでないようです。
私が使用しようとしているコードは次のとおりです。
@api = MediaWiki::Gateway.new 'http://example.wikia.com/api.php'
@api.login('username', 'password')
@headers = {
'User-Agent' => 'example',
'Cookie' => @api.cookies.map { |k, v| "#{k}=#{v};" }.join(' ')
}
query = HTTParty.post('http://example.wikia.com/api.php',
:body => {
'action' => 'query',
'prop' => 'info|revisions',
'intoken' => 'edit',
'titles' => 'Thread:2219',
'format' => 'json'
},
:headers => @headers
)
token = JSON.parse(query.body)
token = token["query"]["pages"]["-1"]["edittoken"]
query = HTTParty.post('http://example.wikia.com/wikia.php',
:body => {
'controller' => 'WallExternal',
'method' => 'changeThreadStatus',
'format' => 'json',
'msgid' => '2219',
'newState' => 'close'
},
:headers => @headers
)
ウィキアは、現在編集トークンを取得するための方法は、以前のバージョンである理由である、Mediawikiの1.19.24を使用しています。
これは主に趣味であり、私はあまり経験していません。私はこの質問をWikiaフォーラムで最初に尋ねました。そして、ユーザーは私にここに来るように勧めました。あなたが提供できるお手伝いをありがとう。
お返事ありがとうございます。私は機会があればセレンを試してみる。あなたの最後の点に関しては、MediaWiki APIを使用してこれを達成する方法がないことはほとんど確信しています。なぜならフォーラムの拡張はWikiaによって行われたからです(私はそれをもっと明確にすべきでした)。 – Matt