<?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; twitpic</title>
	<atom:link href="http://www.meteenee.com/tag/twitpic/feed" rel="self" type="application/rss+xml" />
	<link>http://www.meteenee.com</link>
	<description>พล ส้ม&#039;s Blog</description>
	<lastBuildDate>Fri, 27 Aug 2010 09:14:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>twitpic api test &#8211; curl</title>
		<link>http://www.meteenee.com/twitpic-api-test</link>
		<comments>http://www.meteenee.com/twitpic-api-test#comments</comments>
		<pubDate>Mon, 29 Dec 2008 10:41:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[web 2.0]]></category>
		<category><![CDATA[web 3.0]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[social network]]></category>
		<category><![CDATA[twitpic]]></category>
		<category><![CDATA[twitpic api]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.meteenee.com/twitpic-api-test</guid>
		<description><![CDATA[อิอิ วันนี้ว่างมากๆ เลยมั้งนั่งเขียน อะไรเล่นใหญ่เลยคราวนี้มาเป็น twitpic บ้างเพราะ twitter เองนั้นทำ api ให้เราได้ใช้กันแบบง่ายมากๆ คุณ sugree ยังบอกเลยว่ามันง่ายมำให้คนใช้งานได้ง่ายๆ ทำให้ดังได้ง่ายๆ หุหุ แล้วผมเองก็เขียน PHP ด้วยมาดูกันเลยแล้วกันครับว่า เป็นไงบ้าง &#60;?php class xx_xml { // XML parser variables var $parser; var $name; var $attr; var $data  = array(); var $stack = array(); var $keys; var $path; // either you pass url atau contents. // Use &#8216;url&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>อิอิ วันนี้ว่างมากๆ เลยมั้งนั่งเขียน อะไรเล่นใหญ่เลยคราวนี้มาเป็น twitpic บ้างเพราะ twitter เองนั้นทำ api ให้เราได้ใช้กันแบบง่ายมากๆ คุณ sugree ยังบอกเลยว่ามันง่ายมำให้คนใช้งานได้ง่ายๆ ทำให้ดังได้ง่ายๆ หุหุ</p>
<p>แล้วผมเองก็เขียน PHP ด้วยมาดูกันเลยแล้วกันครับว่า เป็นไงบ้าง</p>
<p><code><br />
&lt;?php<br />
class xx_xml {</code></p>
<p>// XML parser variables<br />
var $parser;<br />
var $name;<br />
var $attr;<br />
var $data  = array();<br />
var $stack = array();<br />
var $keys;<br />
var $path;</p>
<p>// either you pass url atau contents.<br />
// Use &#8216;url&#8217; or &#8216;contents&#8217; for the parameter<br />
var $type;</p>
<p>// function with the default parameter value<br />
function xx_xml($url=&#8217;http://www.opocot.com&#8217;, $type=&#8217;url&#8217;) {<br />
$this-&gt;type = $type;<br />
$this-&gt;url  = $url;<br />
$this-&gt;parse();<br />
}</p>
<p>// parse XML data<br />
function parse()<br />
{<br />
$data = &#8221;;<br />
$this-&gt;parser = xml_parser_create();<br />
xml_set_object($this-&gt;parser, $this);<br />
xml_set_element_handler($this-&gt;parser, &#8216;startXML&#8217;, &#8216;endXML&#8217;);<br />
xml_set_character_data_handler($this-&gt;parser, &#8216;charXML&#8217;);</p>
<p>xml_parser_set_option($this-&gt;parser, XML_OPTION_CASE_FOLDING, false);</p>
<p>if ($this-&gt;type == &#8216;url&#8217;) {<br />
// if use type = &#8216;url&#8217; now we open the XML with fopen</p>
<p>if (!($fp = @fopen($this-&gt;url, &#8216;rb&#8217;))) {<br />
$this-&gt;error(&#8220;Cannot open {$this-&gt;url}&#8221;);<br />
}</p>
<p>while (($data = fread($fp, 8192))) {<br />
if (!xml_parse($this-&gt;parser, $data, feof($fp))) {<br />
$this-&gt;error(sprintf(&#8216;XML error at line %d column %d&#8217;,<br />
xml_get_current_line_number($this-&gt;parser),<br />
xml_get_current_column_number($this-&gt;parser)));<br />
}<br />
}<br />
} else if ($this-&gt;type == &#8216;contents&#8217;) {<br />
// Now we can pass the contents, maybe if you want<br />
// to use CURL, SOCK or other method.<br />
$lines = explode(&#8220;\n&#8221;,$this-&gt;url);<br />
foreach ($lines as $val) {<br />
if (trim($val) == &#8221;)<br />
continue;<br />
$data = $val . &#8220;\n&#8221;;<br />
if (!xml_parse($this-&gt;parser, $data)) {<br />
$this-&gt;error(sprintf(&#8216;XML error at line %d column %d&#8217;,<br />
xml_get_current_line_number($this-&gt;parser),<br />
xml_get_current_column_number($this-&gt;parser)));<br />
}<br />
}<br />
}<br />
}</p>
<p>function startXML($parser, $name, $attr)    {<br />
$this-&gt;stack[$name] = array();<br />
$keys = &#8221;;<br />
$total = count($this-&gt;stack)-1;<br />
$i=0;<br />
foreach ($this-&gt;stack as $key =&gt; $val)    {<br />
if (count($this-&gt;stack) &gt; 1) {<br />
if ($total == $i)<br />
$keys .= $key;<br />
else<br />
$keys .= $key . &#8216;|&#8217;; // The saparator<br />
}<br />
else<br />
$keys .= $key;<br />
$i++;<br />
}<br />
if (array_key_exists($keys, $this-&gt;data))    {<br />
$this-&gt;data[$keys][] = $attr;<br />
}    else<br />
$this-&gt;data[$keys] = $attr;<br />
$this-&gt;keys = $keys;<br />
}</p>
<p>function endXML($parser, $name)    {<br />
end($this-&gt;stack);<br />
if (key($this-&gt;stack) == $name)<br />
array_pop($this-&gt;stack);<br />
}</p>
<p>function charXML($parser, $data)    {<br />
if (trim($data) != &#8221;)<br />
$this-&gt;data[$this-&gt;keys]['data'][] = trim(str_replace(&#8220;\n&#8221;, &#8221;, $data));<br />
}</p>
<p>function error($msg)    {<br />
echo &#8220;&lt;div align=\&#8221;center\&#8221;&gt;<br />
&lt;font color=\&#8221;red\&#8221;&gt;&lt;b&gt;Error: $msg&lt;/b&gt;&lt;/font&gt;<br />
&lt;/div&gt;&#8221;;<br />
exit();<br />
}<br />
}</p>
<p>if(isset($_POST)){</p>
<p>if (!empty($_FILES['media']['name'])) {</p>
<p>$localfile = $_FILES['media']['tmp_name'];</p>
<p>if (!copy($localfile, $_FILES['media']['name'])) {<br />
echo &#8220;failed to copy $file&#8230;\n&#8221;;<br />
}</p>
<p>$localfile = $_FILES['media']['name'];</p>
<p>$ch = curl_init();<br />
curl_setopt($ch, CURLOPT_URL, &#8220;http://twitpic.com/api/uploadAndPost&#8221;);</p>
<p>curl_setopt($ch, CURLOPT_POST, true);<br />
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);</p>
<p>// same as &lt;input type=&#8221;file&#8221; name=&#8221;file_box&#8221;&gt;<br />
$post = array(<br />
&#8220;media&#8221;=&gt; &#8216;@&#8217;.getcwd().&#8217;/&#8217;.$localfile,<br />
&#8220;username&#8221;=&gt; <code>$_POST['username']</code><code>,<br />
"password"=&gt; </code><code>$_POST['password']</code><code>,<br />
"message"=&gt; $_POST['message'],<br />
);<br />
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);<br />
$response = curl_exec($ch);<br />
curl_close($ch);</code></p>
<p>$content = new xx_xml($response, &#8216;contents&#8217;);</p>
<p>$status = $content-&gt;data['rsp']['status'];<br />
$imageUrls = $content-&gt;data['rsp|mediaurl']['data'];</p>
<p>unlink(getcwd().&#8217;/&#8217;.$localfile);</p>
<p>foreach($imageUrls as $url){<br />
header(&#8220;Location: &#8220;.$url);<br />
exit();<br />
}<br />
}<br />
}</p>
<p>?&gt;</p>
<p>&lt;form name=&#8221;twitterForm&#8221; action=&#8221;" method=&#8221;post&#8221; enctype=&#8221;multipart/form-data&#8221;&gt;</p>
<p>media. &lt;input type=&#8221;file&#8221; name=&#8221;media&#8221; /&gt;&lt;br /&gt;<br />
username. &lt;input type=&#8221;text&#8221; name=&#8221;username&#8221; value=&#8221;" /&gt;&lt;br /&gt;<br />
password. &lt;input type=&#8221;text&#8221; name=&#8221;password&#8221; value=&#8221;" /&gt;&lt;br /&gt;<br />
message. &lt;input type=&#8221;text&#8221; name=&#8221;message&#8221; value=&#8221;" /&gt;&lt;br /&gt;<br />
&lt;input type=&#8221;submit&#8221; value=&#8221;OK&#8221; /&gt;<br />
&lt;/form&gt;<br />
อิอิ แค่ง่ายๆ นะไม่ได้ยุ่งยากอะไรมาก ก็คือ ปกติแล้วเราจะต้องส่งไปแบบหน้า post จาก form ปกติ แต่คราวนี้เรามา post แบบ cUrl ไว้ (ตรวจสอบดูก่อนนะว่า web server ได้ลง cUrl เปล่าไม่ลงใช้ไม่ได้นะ)  แล้วก็ทำการ postเหมือน form เลย</p>
<p>ใครจะลองเอาไปทำอะไรเล่นก็เอานะลองเข้าไปดูตัวอย่างเล่นๆ ได้ที่ <a href="http://www.meteenee.com/twitterapi/">http://www.meteenee.com/twitterapi/</a></p>
<p class='fb-like'><iframe src='http://www.facebook.com/plugins/like.php?href=http://www.meteenee.com/twitpic-api-test&amp;layout=&amp;show_faces=true&amp;width=260&amp;action=&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden; width:260px; height:26px'></iframe></p><fb:share-button href="http://www.meteenee.com/twitpic-api-test" type="box_count"></fb:share-button>]]></content:encoded>
			<wfw:commentRss>http://www.meteenee.com/twitpic-api-test/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
