<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>弦の手記 &#187; 機器人</title> <atom:link href="http://blog.frost.tw/tag/%e6%a9%9f%e5%99%a8%e4%ba%ba/feed" rel="self" type="application/rss+xml" /><link>http://blog.frost.tw</link> <description>紀錄關於弦夜的日記</description> <lastBuildDate>Tue, 07 Sep 2010 10:53:21 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.0.1</generator> <atom:link rel='hub' href='http://blog.frost.tw/?pushpress=hub'/> <item><title>IMified &#8211; 設置使用者暱稱之一</title><link>http://blog.frost.tw/code/poston-2010-02-24/postid-415</link> <comments>http://blog.frost.tw/code/poston-2010-02-24/postid-415#comments</comments> <pubDate>Wed, 24 Feb 2010 11:58:44 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[程式語言]]></category> <category><![CDATA[MSN]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[機器人]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=415</guid> <description><![CDATA[今天的網誌可能太晚，因為我在撰寫簡易的程式。 雖然很簡單，不過還是花了一點時間。 (不過寫到一半被奶奶叫去，所以只好拖到現在。) 本篇文章會著重在程式部份，所以文字敘述比較少。 那麼，廢話不多說，就先來開始今天的主題吧！ 今天是使用文字檔案儲存，並且無快取。 因此適合小型使用，大型使用時請避免這種作法。 bot.php &#8211; 機器人主程式 &#60;?php session_id($_REQUEST['userkey'].'-at-'.$_REQUEST['network']); session_start(); include('./data.inc.php'); $nickname = getnick($_REQUEST['userkey']); if($_REQUEST['msg'] == 'exit'){...]]></description> <content:encoded><![CDATA[<p>今天的網誌可能太晚，因為我在撰寫簡易的程式。<br /> 雖然很簡單，不過還是花了一點時間。<br /> (不過寫到一半被奶奶叫去，所以只好拖到現在。)<br /> <span id="more-415"></span><br /> 本篇文章會著重在程式部份，所以文字敘述比較少。<br /> 那麼，廢話不多說，就先來開始今天的主題吧！</p><p>今天是使用文字檔案儲存，並且無快取。<br /> 因此適合小型使用，大型使用時請避免這種作法。</p><p>bot.php &#8211; 機器人主程式</p><pre class="brush: php">
&lt;?php

session_id($_REQUEST['userkey'].'-at-'.$_REQUEST['network']);
session_start();

include('./data.inc.php');

$nickname = getnick($_REQUEST['userkey']);

if($_REQUEST['msg'] == 'exit'){
	$_SESSION['action'] = NULL;
	echo "成功逃離無限地獄！";
}else{

	switch($_SESSION['action']){
		case 1:
			upnick($_REQUEST['msg'], $_REQUEST['userkey']);
			$_SESSION['action'] = NULL;
			echo "修改完成！";
		break;
		case 2:
			echo "{$nickname}想繼續發呆就別輸入 exit";
		break;
		default:
			switch($_REQUEST['msg']){
				case '?':
				case 'help':
					echo "輸入1修改暱稱，輸入2開始發呆";
				break;
				case '1':
					$_SESSION['action'] = 1;
					echo "輸入暱稱後更新";
				break;
				case '2':
					$_SESSION['action'] = 2;
					echo "進入發呆區";
				break;
				default:
					echo "需要幫助請輸入 ? 或 help";
			}
	}
}

?&gt;
</pre><p>上方的程式碼是之前的版本修改而來，並且改用 Session 作為選單紀錄。</p><p>data.inc.php &#8211; 目前只有一項功能，暫時針對此功能製作。</p><pre class="brush: php">
&lt;?php
	function data($path = './nickname.txt'){ //存取資料
		$data = file_get_contents($path);
		$line = explode("\n", $data);
		foreach($line as $nicks){
			$nicks = explode("\t", $nicks);
			$nickname[$nicks[0]] = $nicks[1];
		}
		return $nickname;
	}

	function getnick($userkey){ //取得暱稱
		$nickname = data();
		$nickname = $nickname[$userkey] ? $nickname[$userkey] : '訪客';
		return $nickname;
	}

	function upnick($nickname, $userkey, $path = './nickname.txt'){ //更新暱稱
		$data = data();
		$data[$userkey] = $nickname;
		foreach($data as $key => $nicks){
			$line[] = "{$key}\t{$nicks}";
		}
		$nicknames = implode("\n", $line);
		file_put_contents($path, $nicknames);
	}
?&gt;
</pre><p>此程式碼是以 PHP5 為基礎使用，因此無法運作時請檢查 PHP 版本。</p><p>大致上就算完成製作了，我也進行過測試。<br /> 一切都正常運作，不過因為會頻繁讀取檔案，所以小型機器人的架構使用會比較好。</p><p>下次寫程式就不知道是何時了！<br /> 畢竟「開學，事情又增多！」</p><p>總之，希望大家別忘記在有空的時候經常來拜訪本站！</p><div class="linkwithin_hook" id="http://blog.frost.tw/code/poston-2010-02-24/postid-415"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/code/poston-2010-02-24/postid-415/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>IMified 不同IM不同回應</title><link>http://blog.frost.tw/code/poston-2010-02-23/postid-412</link> <comments>http://blog.frost.tw/code/poston-2010-02-23/postid-412#comments</comments> <pubDate>Tue, 23 Feb 2010 11:53:14 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[程式語言]]></category> <category><![CDATA[MSM]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[機器人]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=412</guid> <description><![CDATA[今天發網誌晚很多，主要是因為在趕工網界博覽會的專題頁。 (我竟然完完全全的把這個頁面忘記，只好先讓網誌晚點上場了！) 其實是個很簡單的東西，而因為我今天有點晚發，很多事情沒做。 所以今天文章比較短篇，請各位見諒。 在上次使用 Session 時，有發現一個變數 $_REQUEST['network'] 而這個變數的作用為何呢？ 其實就是「分辨使用的即時通訊軟體」 因此，利用傳入的 network 來分辨，就可以依照 IM 來傳回不同訊息。 &#60;?php switch($_REQUEST['network']){ case 'Yahoo': echo...]]></description> <content:encoded><![CDATA[<p>今天發網誌晚很多，主要是因為在趕工網界博覽會的專題頁。<br /> (我竟然完完全全的把這個頁面忘記，只好先讓網誌晚點上場了！)<br /> <span id="more-412"></span><br /> 其實是個很簡單的東西，而因為我今天有點晚發，很多事情沒做。<br /> 所以今天文章比較短篇，請各位見諒。</p><p>在上次使用 Session 時，有發現一個變數 $_REQUEST['network']<br /> 而這個變數的作用為何呢？<br /> 其實就是「分辨使用的即時通訊軟體」</p><p>因此，利用傳入的 network 來分辨，就可以依照 IM 來傳回不同訊息。</p><pre class="brush: php">&lt;?php

switch($_REQUEST['network']){
  case 'Yahoo':
    echo "你正使用 Yahoo 與機器人溝通";
  break;
  case 'MSN':
    echo "你正使用 MSN 與機器人溝通";
  break;
  case 'AIM':
    echo "你正使用 AIM 與機器人溝通";
  break;
  default:
    echo "你使用 Yahoo/MSN/AIM 以外的即時通訊軟體，或者未知的軟體。";
}

?&gt;
</pre><p>整體構造非常簡單，官方的範例是用來針對特推以及簡訊部份。<br /> 而特推與簡訊部份不會有 $_REQUEST['msg'] 這個值，也是另外一種判斷方法。</p><p>而今天暫時就到這裡，希望大家能夠見諒。<br /> &#8212; 高二的生活愈來愈忙碌，真不知道下次能路影片展示給大家看是何時。</p><div class="linkwithin_hook" id="http://blog.frost.tw/code/poston-2010-02-23/postid-412"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/code/poston-2010-02-23/postid-412/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>IMified 機器人使用 Session</title><link>http://blog.frost.tw/life/poston-2010-02-22/postid-409</link> <comments>http://blog.frost.tw/life/poston-2010-02-22/postid-409#comments</comments> <pubDate>Mon, 22 Feb 2010 10:50:13 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[生活雜記]]></category> <category><![CDATA[MSN]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[機器人]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=409</guid> <description><![CDATA[昨天在說明 IMified 機器人時，說到某些功能無法使用，而無法做多樣變化。 而昨晚在官方的知識庫中，發現了一些新資訊。 這個資訊對於「功能」的加強，會有非常大的幫助。 如果各位擅長於開發網站，想必對 Session 已經有足夠的認識。 而在 IMified 的設計中，機器人是無法儲存 Cookie 的，因此 Session ID 也理所當然的在每次使用時「被更換」 那麼，要如何存取 Session 呢？ 這下有人建議：「將...]]></description> <content:encoded><![CDATA[<p>昨天在說明 IMified 機器人時，說到某些功能無法使用，而無法做多樣變化。<br /> 而昨晚在官方的知識庫中，發現了一些新資訊。<br /> 這個資訊對於「功能」的加強，會有非常大的幫助。<br /> <span id="more-409"></span><br /> 如果各位擅長於開發網站，想必對 Session 已經有足夠的認識。</p><p>而在 IMified 的設計中，機器人是無法儲存 Cookie 的，因此 Session ID 也理所當然的在每次使用時「被更換」<br /> 那麼，要如何存取 Session 呢？</p><p>這下有人建議：「將 User Key 設定為 Session ID 吧！」</p><p>原本我對於 Session ID 並沒有深入認識，不過一看到之後。<br /> 就馬上去了解 Session ID 的相關資訊，也得出了處理方法。</p><p>本篇文章介紹的是 PHP 的作法，畢竟我比較擅長PHP撰寫。</p><pre class="brush: php">&lt;?php
session_id($_REQUEST['userkey'].'-at-'.$_REQUEST['network']); //設定Session ID 並且依照 Network 分別紀錄
session_start();

if($_SESSION['action']){
  switch($_SESSION['action']){
    case 1:
      //此區為登入功能，省略
    break;
    case 2:
      //此需為查詢服務，省略
    break;
    //這裡可以自由擴充
    default:
      echo "未定義動作。";
  }
}else{ //沒有Session 紀錄時運行
  switch($_REQUEST['msg']){
    case '/?':
    case '/help': //設定兩種方式取得幫助( Pidgin使用者無法使用 /help 語法故提供 /? )
      echo "輸入對應數字可開啟對應功能
 1. 登入系統
2. 查詢帳戶";
    break;
    case 1:
      $_SESSION['action'] = 'login';
      echo "請輸入帳號";
    break;
    case 2:
      if(!$_SESSION['auth']){
          echo "尚未登入";
      }else{
          echo "輸入對應數字取得相關服務";
      }
    break;
    default:
      echo "需要幫助請輸入 /? 或者 /help 查詢。";
  }
}
?&gt;
</pre><p>以上程式碼為即時撰寫出來，並沒有實際的測試。<br /> 如果有錯誤請留言告知，我會儘快修正。</p><p>有了 Session 的支援，在開發上又更加的省力。<br /> 比起我原本使用的與value0的訊息紀錄，更能夠做多樣的變化。</p><p>最後，希望大家仍能提供「心得」給我。</p><div class="linkwithin_hook" id="http://blog.frost.tw/life/poston-2010-02-22/postid-409"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/life/poston-2010-02-22/postid-409/feed</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>IMified &#8211; 免費的 MSN 機器人</title><link>http://blog.frost.tw/code/poston-2010-02-21/postid-406</link> <comments>http://blog.frost.tw/code/poston-2010-02-21/postid-406#comments</comments> <pubDate>Sun, 21 Feb 2010 10:22:58 +0000</pubDate> <dc:creator>蒼時弦也</dc:creator> <category><![CDATA[程式語言]]></category> <category><![CDATA[MSN]]></category> <category><![CDATA[PHP]]></category> <category><![CDATA[機器人]]></category><guid isPermaLink="false">http://blog.frost.tw/?p=406</guid> <description><![CDATA[各位有想過開發MSN機器人嗎？ 使用 IMified 幫你一圓夢想吧！ 不過根據弦的觀察，其實功能並不多。 網站網址：http://www.imified.com/ 雖然能使用已經很棒了，不過功能還有待加強。 此項服務從 2007 年開始，實際進步多少我無法確定。 而目前 IMified 提供什麼呢？ 1. 無限MSN機器人數量(一照我看到的資訊，是沒有限制的) 2. 免費SMS簡訊服務(我沒辦法啟用，而且限定在美國使用) 3. Google Talk,...]]></description> <content:encoded><![CDATA[<p>各位有想過開發MSN機器人嗎？<br /> 使用 IMified 幫你一圓夢想吧！<br /> 不過根據弦的觀察，其實功能並不多。<br /> <span id="more-406"></span><br /> 網站網址：<a href="http://www.imified.com/" target="_blank">http://www.imified.com/</a><br /> 雖然能使用已經很棒了，不過功能還有待加強。<br /> 此項服務從 2007 年開始，實際進步多少我無法確定。</p><p>而目前 IMified 提供什麼呢？<br /> 1. 無限MSN機器人數量(一照我看到的資訊，是沒有限制的)<br /> 2. 免費SMS簡訊服務(我沒辦法啟用，而且限定在美國使用)<br /> 3. Google Talk, MSN, AIM, Jabber, Twitter, Yahoo (似乎停用) 的整合</p><p>目前 IMified 無法支援的部份：<br /> 自訂頭像、顯示名稱，還有更多元的API功能(目前API只有四項)</p><p>而已知有一個Bug會造成開發上有些麻煩：<br /> &lt;goto&gt; 的系統擴充語法無法使用，讓一部份功能無法運用。</p><p>而詳細的開發細節，就在下一次介紹了！<br /> 這邊分享一段我開發的程式碼，功能很簡單，不過可以用來參考。</p><p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Rn3QPkrmhCI&amp;hl=zh&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/Rn3QPkrmhCI&amp;hl=zh&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p><p>觀看完畢後，請別忘記回覆文章喔！</p><div class="linkwithin_hook" id="http://blog.frost.tw/code/poston-2010-02-21/postid-406"></div>]]></content:encoded> <wfw:commentRss>http://blog.frost.tw/code/poston-2010-02-21/postid-406/feed</wfw:commentRss> <slash:comments>2</slash:comments> </item> </channel> </rss>