ブログでは、トラックバックとは別に、そのブログが更新されたことを通知する更新pingという仕組みが用意されている。 今回は、更新ping を送信する仕組みをPHPで実装することにした。
0001: <?php
0002: // ここからPHPプログラム =======================================================
0003: /** SendWeblogUpdatePing.php
0004: * 更新pingを送る
0005: * @copyright (c)studio pahoo
0006: * @author パパぱふぅ
0007: * @version 1.0 2005/08/18
0008: *
0009: */
0010:
0011: /**
0012: * 更新pingを送る
0013: * @param String $server 送信先サーバのURL
0014: * @param String $name ブログ名/サイト名
0015: * @param String $url ブログ/サイトURL
0016: * @return int エラーコード
0017: * 0 = 正常終了
0018: * (-1) = サーバURLが不正が見つからない
0019: * その他 = サーバからのエラーコード
0020: */
0021: function SendWeblogUpdatesPing($server, $name, $url) {
0022: //送信先サーバURLをホスト名とパス名に分解する
0023: $arr = parse_url($server);
0024: $host = $arr["host"]; //ホスト名
0025: $path = $arr["path"]; //パス名
0026: if ($host == "") return (-1);
0027:
0028: //送信先サーバをオープンする
0029: $sock = fsockopen($host, 80, $errno, $errstr, 60);
0030: if ($sock == FALSE) return FALSE;
0031:
0032: //更新pingをつくる(面倒なのでテキストで処理してます)
0033: $str = "";
0034: $str .= "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n";
0035: $str .= "<methodCall>\r\n";
0036: $str .= "<methodName>weblogUpdates.ping</methodName>\r\n";
0037: $str .= "<params>\r\n";
0038: $str .= "<param>\r\n";
0039: $str .= "<value>$name</value>\r\n";
0040: $str .= "</param>\r\n";
0041: $str .= "<param>\r\n";
0042: $str .= "<value>$url</value>\r\n";
0043: $str .= "</param>\r\n";
0044: $str .= "</params>\r\n";
0045: $str .= "</methodCall>\r\n";
0046:
0047: //送信する
0048: fputs($sock, "POST " . $path . " HTTP/1.1\r\n");
0049: fputs($sock, "Host: $host\r\n");
0050: fputs($sock, "Content-type: text/xml\r\n");
0051: fputs($sock, "Content-length: " . strlen($str) . "\r\n");
0052: fputs($sock, "\r\n");
0053: fputs($sock, "$str\r\n");
0054:
0055: //リターンを受け取る
0056: $res = "";
0057: while (!feof($sock)) $res .= fgetc($sock);
0058:
0059: fclose($sock);
0060:
0061: //リターンからエラーコードを解釈する
0062: preg_match("/(\<\?xml)(.*)(\<\/methodResponse\>)/s", $res, $arr);
0063: $res = preg_replace("/UTF-8/i", "utf-8", $arr[0]); //コーディング文字の置換
0064:
0065: $dom = domxml_open_mem($res);
0066: $methodres = $dom->get_elements_by_tagname("methodResponse");
0067: $params = $methodres[0]->get_elements_by_tagname("params");
0068: $param = $params[0]->get_elements_by_tagname("param");
0069: $value = $param[0]->get_elements_by_tagname("value");
0070: $struct = $value[0]->get_elements_by_tagname("struct");
0071: $member = $struct[0]->get_elements_by_tagname("member");
0072: $value = $member[0]->get_elements_by_tagname("value");
0073: $error = $value[0]->get_elements_by_tagname("boolean");
0074:
0075: return $error[0]->get_content();
0076: }
0077:
0078:
0079: //初回起動時
0080: if (isset($_POST["SERVER"]) == FALSE) {
0081: $myself = basename($_SERVER["PHP_SELF"]);
0082:
0083: // ここまでPHPプログラム =======================================================
0084: ?>
0085: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
0086: "http://www.w3.org/TR/html4/loose.dtd">
0087: <html lang="ja">
0088: <head>
0089: <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
0090: <title>更新ping送信</title>
0091: </head>
0092: <body>
0093:
0094: <h1>■更新ping送信</h1>
0095: <form method="post" action="<?= $myself ?>">
0096: <table border="0">
0097: <tr>
0098: <td>サーバURL入力</td>
0099: <td><input name="SERVER" type="text" size="100" /></td>
0100: </tr>
0101: <tr>
0102: <td>ブログ/サイト名</td>
0103: <td><input name="NAME" type="text" size="40" /></td>
0104: </tr>
0105: <tr>
0106: <td>記事URL</td>
0107: <td><input name="URL" type="text" size="100" /></td>
0108: </tr>
0109: <tr>
0110: <td></td>
0111: <td align="center"><input type="submit" name="Submit" value="送信" /></td>
0112: </tr>
0113: </table>
0114: </form>
0115: </body>
0116: </html>
0117:
0118: <?php
0119: // ここからPHPプログラム =======================================================
0120: } else {
0121: $name = stripslashes($_POST["NAME"]);
0122: $url = stripslashes($_POST["URL"]);
0123: $server = stripslashes($_POST["SERVER"]);
0124:
0125: $res = SendWeblogUpdatesPing($server, $name, $url);
0126:
0127: switch ($res) {
0128: case 0:
0129: echo "更新pingを送信しました";
0130: break;
0131: case (-1):
0132: echo "サーバURLが間違っていませんか?";
0133: break;
0134: default:
0135: echo "エラーコード:$res";
0136: }
0137: }
0138: ?>
0139:
| 2005年08月22日更新 | ||
| <<前へ | <目次> | 次へ>> |
| 戻る | 【関連ページ】 | |