<?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>Obsolete Your Idols &#187; search</title>
	<atom:link href="http://blog.manjusri.org/tag/search/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.manjusri.org</link>
	<description>Book Reviews and Blather</description>
	<lastBuildDate>Wed, 06 Jul 2011 18:46:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Couldn&#8217;t Stop Searching</title>
		<link>http://blog.manjusri.org/2009/04/19/couldnt-stop-searching/</link>
		<comments>http://blog.manjusri.org/2009/04/19/couldnt-stop-searching/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 06:07:27 +0000</pubDate>
		<dc:creator>binder</dc:creator>
				<category><![CDATA[Nerdery]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[chatbot]]></category>
		<category><![CDATA[muck]]></category>
		<category><![CDATA[mud]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://blog.manjusri.org/?p=174</guid>
		<description><![CDATA[I was fiddling around for something to do with a Yahoo API and so now the MUD chatbot returns (simple) websearch results. Isn&#8217;t that nice? I think it&#8217;s nice. #!/usr/bin/perl # mudbot by Shannon Prickett &#60;stp@manjusri.org&#62; # connect a pandorabots.com chatbot with a particular TinyMUCK, Pegasus. package mudbot; use Smart::Comments; use Modern::Perl; use Net::Telnet; use [...]]]></description>
			<content:encoded><![CDATA[<p>I was fiddling around for something to do with a Yahoo API and so now the MUD chatbot returns (simple) websearch results.  Isn&#8217;t that nice?  I think it&#8217;s nice.</p>
<p><pre><pre><br />
#!/usr/bin/perl<br />
<br />
# mudbot by Shannon Prickett &lt;stp@manjusri.org&gt;<br />
# connect a pandorabots.com chatbot with a particular TinyMUCK, Pegasus.<br />
<br />
package mudbot;<br />
<br />
use Smart::Comments;<br />
use Modern::Perl;<br />
use Net::Telnet;<br />
use Net::AIML;<br />
use DB_File;<br />
use WWW::Mechanize;<br />
<br />
use vars qw{$being_quiet %global_exit $mud_connection $mud_conversation $mud_host $mud_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_pass $mud_port $mud_sent $pid $robot %room_name $yahoo_id};<br />
use subs qw{setup sometimes speak};<br />
<br />
$mud_host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &#039;ginka.armageddon.org&#039;;<br />
$mud_port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &#039;4242&#039;;<br />
$mud_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &#039;Somebot&#039;;<br />
$mud_pass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &#039;YRMEME&#039;;<br />
$being_quiet&nbsp;&nbsp;&nbsp;&nbsp;= 0;<br />
$pid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= $$;<br />
<br />
tie %room_name, &#039;DB_File&#039;, &#039;mapfile&#039; or<br />
&nbsp;&nbsp;&nbsp;&nbsp;die &quot;can&#039;t tie to mapfile: $!\n&quot;;<br />
<br />
$robot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= Net::AIML-&gt;new( botid =&gt; &#039;BOTIDGOESHERE&#039; ); <br />
<br />
$mud_connection = new Net::Telnet( Host =&gt; $mud_host, Port =&gt; $mud_port )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or die &quot;Can&#039;t connect to $mud_host $mud_port: $!&quot;;<br />
<br />
$yahoo_id = &#039;LALALALA&#039;;<br />
setup( $mud_connection );<br />
<br />
TALKLOOP: while (1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;### TALKLOOP start<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $atme = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $prematch = &#039;&#039;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $postmatch = &#039;&#039;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $who_said;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;my ($stub_said, $what_said) = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;waitfor(&nbsp;&nbsp; Match =&gt; &#039;/ says, &quot;.*&quot;/&#039;,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Errmode =&gt; &#039;return&#039;, );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;next TALKLOOP unless defined $what_said;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$stub_said =~ qr{ START \d+ .+ \b(\w+)\b }msx;<br />
&nbsp;&nbsp;&nbsp;&nbsp;$who_said = $1;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$what_said =~ s{says, \&quot;(.*)\&quot;}{$1}g;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;### Got: $who_said&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;### Got: $what_said<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($what_said =~ qr{$mud_name}msxi){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;### saw my name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$atme = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$what_said =~ s{$mud_name}{}g;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ($atme) &amp;&amp; ($what_said =~ qr{QUIT}) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;QUIT&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ($atme) &amp;&amp; ($what_said =~ qr{be quiet}) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($being_quiet) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;say Maximum verbosity achieved.&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$being_quiet = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;say Shutting up now.&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$being_quiet = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ($atme) &amp;&amp; ($what_said =~ qr{search for ([\w\s]+)}) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;### requested to search<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $terms = $1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;### got: $terms<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @terms = split &#039; &#039;, $terms;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $querystring = join &#039;+&#039;, @terms;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sometimes( )) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;say Found http://lmgtfy.com/?q=$querystring&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $web_connect = WWW::Mechanize-&gt;new( autocheck =&gt; 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$web_connect-&gt;get( &quot;http://boss.yahooapis.com/ysearch/web/v1/$querystring?appid=$yahoo_id&amp;format=xml&quot;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $results = $web_connect-&gt;content();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (defined $results) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speak( &#039;Found some URLs:&#039; );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @lines = split /\n/, $results;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for my $line ( @lines ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;### got: $line<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($line =~ qr{&lt;url&gt;(.+)&lt;/url&gt;}) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $output = $1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speak( $output );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next TALKLOOP;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ($atme) &amp;&amp; ($what_said =~ qr{explore}) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;say OK, going to poke around now.&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 3;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&#039;home&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto EXPLORELOOP;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($being_quiet) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next TALKLOOP;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $response = $robot-&gt;tell($what_said);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($atme) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;response: $response\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speak( $response );<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( !$being_quiet &amp;&amp; (sometimes()) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;jumping in with $response\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speak( $response );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
EXPLORELOOP: while (1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;### exploring<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;my ($name, $desc);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&#039;look&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $startmark&nbsp;&nbsp; = $mud_connection-&gt;getline( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;$name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = $mud_connection-&gt;getline( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (my $line = $mud_connection-&gt;getline( Errmode =&gt; &#039;return&#039;, )) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$desc .= $line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;waitfor( Match =&gt; &#039;/END$pid/&#039;, Errmode =&gt; &#039;return&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;chomp $name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;chomp $desc;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;### got: $name<br />
&nbsp;&nbsp;&nbsp;&nbsp;### got: $desc<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$room_name{$name} = $desc;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;sleep 10;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&#039;out&#039;);<br />
}<br />
<br />
sub setup {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $mc = shift;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;dump_log(&#039;/home/binder/src/mb/logfile&#039;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;waitfor(&#039;/connect\s+guest\s+guest/&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;print(&quot;connect $mud_name $mud_pass&quot;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;waitfor(&#039;/Vote to ban the MisInformation SuperHighway/&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;print(&#039;@desc me=Just a Perl toy of Binder\&#039;s.&#039;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;print(&quot;OUTPUTPREFIX START$pid&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;print(&quot;OUTPUTSUFFIX END$pid&quot;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;waitfor(&#039;/Description set/&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;print(&quot;home\nout\nvillage&quot;);<br />
}<br />
<br />
sub sometimes {<br />
&nbsp;&nbsp;&nbsp;&nbsp;return (rand() &gt; .75);<br />
}<br />
<br />
sub speak {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $response = shift;<br />
&nbsp;&nbsp;&nbsp;&nbsp;my @lines = split /\n/, $response;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for my $line (@lines) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;say $line&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
</pre></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.manjusri.org/2009/04/19/couldnt-stop-searching/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

