朝顔日記

URL をメモる何か

2005-01-30

ともさんが、RssMemo をパクったや、RssMemo あれこれにて面白そうなことを始めて、実際にさわらせてもらったりしたらうらやましくなったので、自分でも URI を説明つきで簡単にメモできるスクリプトを作ってみた。以下、memo.php です。


<?php
// 設定
$log = "./memo.log";                // 保存するログ
$pass = "hoge";                     // 投稿用パスワード
$items_num ="100";                  // メモの保存件数
$script = "http://hogehoge/memo/memo.php";  // メモの uri
$TZD = "+09:00";                    // タイムゾーン
$memo_title = "URI メモ";           // html のタイトル

$lines = file($log);
if ($_POST['write'] && $_POST['link'] && $_POST['title'] && $_POST['pass']== $pass  ) {
  $title = htmlspecialchars($_POST['title']);
  $link = strip_tags($_POST['link']);
  $description = strip_tags($_POST['description']);
  $description = str_replace("\r\n", "<br />", $description);
  $description = str_replace("\r", "<br />", $description);
  $description = str_replace("\n", "<br />", $description);
  $time = date("Y-m-d\TH:i:s").$TZD;
  $data = "$title\t$link\t$description\t$time\n";
  array_unshift($lines, $data);
}

if ($_GET['title']){
  $title = mb_convert_encoding($_GET['title'],"utf-8","auto");
}
if ($_GET['link']){
  $link = $_GET['link'];
}
if ($_GET['description']){
  $description = mb_convert_encoding($_GET['description'],"utf-8","auto");
}

?>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<link rel="stylesheet" href="main.css" type="text/css" media="screen,projection" />
<title><?php print($memo_title); ?></title>
</head>
<body>
<h1><?php print($memo_title); ?></h1>
<ul>
<li><a href="#form">投稿フォーム</a></li>
<li><a href="memo_rss.php"><img src="../img/rss.png" alt="RSS" /></a></li>
</ul>
<h2>メモ</h2>
<dl>
<?php
foreach($lines as $line) {
  $line = rtrim($line);
  $items = explode("\t", $line);
  print("<dt><a href=\"{$items[1]}\">{$items[0]}</a> <span>{$items[3]}</span></dt>\n");
  print("<dd>{$items[2]}</dd>\n");
}
$fp = fopen($log, 'w');
flock($fp,2);
$i = 0;
foreach($lines as $line) {
  $i++;
  if($i <= $items_num){
    fputs($fp, $line);
  }
}
flock($fp,3);
fclose($fp);
?>
</dl>

<h2 id="form">メモ投稿フォーム</h2>
<form method="post" action="<?php print($_SERVER['PHP_SELF']); ?>">
<p><label for="title">Title</label> : <input type="text" name="title" id="title" size="80" value="<?php print($title); ?>"/></p>
<p><label for="link">Link</label> : <input type="text" name="link" id="link" size="80" value="<?php print($link); ?>" /></p>
<p><label for="description">説明</label> : <br />
<textarea name="description" cols="60" rows="4" id="description"><?php print($description); ?></textarea></p>
<p><label for="user">User</label> : <input type="text" name="useer" id="user" size="20" value="" /></p>
<p><label for="pass">Password</label> : <input type="password" name="pass" id="pass" /></p>
<p><input type="submit" name="write" value="送信" /></p>
</form>
<p><a href="javascript:if%20(navigator.appName.indexOf('Internet%20Explorer')%20!=%20-1)%20{%20sT=encodeURIComponent(document.title);%20sL=encodeURIComponent(location.href);%20sD=encodeURIComponent(document.selection.createRange().text);%20}%20else%20{%20sT=encodeURIComponent(document.title);%20sL=encodeURIComponent(location.href);%20sD=document.getSelection();%20}%20if%20(sL%20!=%20'')%20{%20uri%20=%20'<?php print($script); ?>?title='%20+%20sT%20+%20'&amp;link='%20+%20sL%20+%20'&amp;description='%20+%20sD;%20location.href%20=%20uri;%20}">投稿用ブックマークレット</a></p>

</body>
</html>

ログを保存するファイルには、パーミッション、666 など書き込み可にしておく必要があります。

とりあえず誰でも投稿できるサンプルも設置して置きます。適当にいじってみてください。最新20件のみ保存します。私が実際に使っているのは、URI メモ です。

なお投稿用のブックマークレットは、RssMemo より拝借しました。メモしたいページで適当な部分を範囲選択してブックマークレットを起動すると、ページタイトル、URI、選択範囲をコピーしてメモ投稿フォームに貼り付けてくれます。便利なものありがとうございます。> Kyo Nagashima さん

この memo.php のライセンスは Creative Commons Attribution Non-Commercial です。

バグ、ハケーンしたので微修正。スマソ

「URL をメモる何か」へコメントをつける

書き込み時の挙動について
URI らしき文字列には自動的にリンクが張られます。また "<" や、">" は実体参照化されます。
スパム対策のため、リファラを切っていると投稿できません。

この記事へのツッコミ

1: jac (2005-12-28T02:12:19+09:00)
こんにちは!いつも勉強させて頂いてます。いきなり質問なんですが,誰でも投稿できるサンプルの方はlogへの書き込みが新しいものが頭にきてますよね?上記のURLメモも同じようにするには,どうしたらいいでしょうか?
2: のり (2005-12-28T11:06:38+09:00)
jac さん、こんにちは。
上記のスクリプトでも新しいメモが上に来るようになっているはずなんですが、なりませんかね?
いずれにしろ、上のものを改良した Watson さんのスクリプトの方がいいかもしれません。私も現在はそっちを改造したものを使っています。:p)
http://scrlab.g-7.ne.jp/diary/200502.php#D06
3: jac (2006-01-06T17:37:19+09:00)
なりました。ありがとうございました。
この記事の永続的 URI ならびに トラックバック ping URI
http://diary.noasobi.net/2005/01/diary_050130a.html