質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

2324閲覧

ニコニコ生放送のコメントが取得できない。

kazuma_1010

総合スコア10

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2016/11/10 04:39

編集2022/01/12 10:55

以下の流れで、ニコニコ生放送のコメントを取得しようとしています。

1.ある放送の放送ID(lv〜)をいれる

2.ニコ生にログイン

3.クッキー情報を取得

4.クッキー情報からセッションを取得

5.コメントサーバー情報(サーバーアドレス、ポート、スレッドID)を取得

6.ソケットを作成し、取得したアドレス、ポートで接続

7.スレッドIDを埋め込んだ文字列を送信

8.受信データからコメント取得

以下は、サーバーアドレス、ポート、スレッドを取得して、変数に入れるところからのコードです。

PHP

1// サーバーアドレス 2$addr = $xmlAry['ms']['addr']; 3// ポート 4$port = $xmlAry['ms']['port']; 5//スレッド 6$thread = $xmlAry['ms']['thread']; 7 8//送信するメッセージ 9$msg_format = '<thread thread="%s" version="(20061206|20090904)" res_from="-10" scores="1"/>\0'; 10 11$msg = sprintf($msg_format,(string)$thread); 12 13$res = ''; 14 15//ソケット作成 16$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 17 18if ($socket == true) { 19 20 // ソケット接続 21 $connect_result = socket_connect($socket,$addr,$port); 22 23 if ($connect_result === true) { 24 25 $write_result = socket_write($socket, $msg, strlen($msg)); 26 27 if ($write_result == true){ 28 29 $res = '送信しました。'.PHP_EOL; 30 31 }else{ 32 33 //socket_strerror:ソケットエラーの内容を文字列として返す 34 //socket_last_error:ソケットの直近のエラーを返す 35 $res = 'socket_write() 失敗: '.socket_strerror(socket_last_error($socket)).PHP_EOL; 36 37 } 38 39 }else{ 40 $res = 'socket_connect() 失敗: '.socket_strerror(socket_last_error($socket)).PHP_EOL; 41 } 42}else{ 43 $res = 'socket_create() 失敗: '.socket_strerror(socket_last_error()).PHP_EOL; 44 45} 46 47$buf = 'This is my buffer.'; 48 49if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_DONTWAIT))) { 50 echo "Read $bytes bytes from socket_recv(). Closing socket..."; 51} else { 52 var_dump($bytes); 53 echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($socket)) . "\n"; 54} 55 56socket_close($socket); 57

今、7までコーディングが終わっていて、7で文字列を送信した際に受け取るデータ(コードでいうと、$bytes)がNULLとなってしまっていて、以下のようなエラーが出ています。

「socket_recv() failed; reason: Resource temporarily unavailable」

尚、5でサーバーアドレス、ポート、スレッドIDを取得し、6、7でソケット接続し、メッセージ文字列が送信ができているのを確認しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問