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