Posts Tagged ‘api’
API เบื้องต้น และแนวคิดของ API
API นั้นเราอาจจะได้ยินกันบ่อยๆ ช่วงนี้ เอ่ หรือเราได้ยินไปเองหว่า 555 และช่วงหลังๆ เองก็มีการจัดงาน camp เกี่ยวกับ API อีกด้วย
API นั้น ย่อมาจาก application programming interface ซึ่งหมายถึง ตัวเชื่อมกับ application นั้นเอง
ในความจริงแล้ว API นั้นถ้าจะคิดง่ายๆ แล้วก็เหมือนกับ function หนึ่งๆ นะให้คิดว่าเป็นแบบนี้ (ถึงจะสื่อความหมายผิดเพี้ยนไป) เพราะ Interface นั้นก็คือ สิ่งที่เราใส่ input ลงไปแล้วได้ผลลัพธ์ ออกมานั่นเอง
ถ้าให้คิดว่าเป็นเหมือน function แล้วแม้แต่เด็กที่เริ่มเขียนโปรแกรมใหม่ๆ เองก็ยังพอเข้าใจ เพราะความจริงแล้วมันก็ไม่ได้ยากอย่างที่คิดหรอก
API นั้นมีหลายแบบและแตกต่างกันมาก ทั้งในเรื่องของภาษาในการเขียนโปรแกรมออกมาและการเรียกใช้งาน และอย่างอื่นอีกมากมาย แต่ที่ใหญ่ๆ ก็ 2 ตัวที่บอกไปเนี่ยแหละ
API เองถูกประยุกต์ใช้มาตั้งแต่นานนมมาแล้ว ติดปัญหาที่ภาษาในการเรียกใช้ซะมาก การที่จะเรียกใช้ API ที่เขียนขึ้นมาได้จึงต้องเขียนภาษาเดียวกันจึงจะเรียกใช้กันได้ ข้ามสายพันธ์ไม่ได้่เลยทีเดียว
ช่วงหลังๆ ได้มี XML ซึ่งเป็นภาษาในการแลกเปลี่ยนข้อมูลทำให้ข้อจำกัดพวกนี้หายไป เขียนอะไรก็ได้ gen ออกมาให้เป็น XML ให้ได้ก็พอ ส่วนอีกฝ่ายก็จะเขียนโปรแกรมสำหรับอ่าน XML แล้วนำ data เอาไปใช้ แค่นั้นเอง
การเรียกใช้ API นั้นอย่าคิดว่าเป็นการเรียกกันข้ามเครื่อง หรือ เรียกๆกันผ่านเว็บอย่างเดียวนะ เพราะ ก่อนที่จะมีเว็บ ก็มีการใช้ API กันแล้ว โดย API ที่ออกมาเป็นชุดๆ สำหรับใช้งานได้เลย ก็คือ library นั้นเอง แต่ จะเป็นขั้นก่อนนิดนึง ตรงที่ library เองจะทำงานด้วยตัวเองไม่ได้แค่นั้น
ตัวอย่างของ API ที่เรา(อาจ)เห็นกันบ่อยๆ ก็เช่น เราติดต่อไปหา mysql นั่นแหละ ให้คิดดูดีๆ ว่า กว่ามันจะไปเรียก ข้อมูลมาจาก mysql ต้องทำอะไรบ้าง
ถ้า้เป็น PHP เองก็ต้องเขียน
mysql_connect(xxx,xxx,xxx,xxx);
ซึ่งตรงนี้หมายถึงอะไร ก็หมายถึง เราเรียก function นั่นเอง แต่ว่าเป็น function มาตราฐานแค่นั้นเอง เลยเหมือนกับมีมาให้แต่ต้นไม่ต้องไปเอา library มาจากที่อื่นแค่นั้นเอง แล้ว API มันอยู่ตรงใหน นั่นซิ ก็ใน function นี้ยังไงล่ะครับ
คิดว่าอยู่ๆ เรียก mysql_connect แล้วมันติดต่อได้เลยเหรอ ไม่ใช่แบบนั้นหรอกนะ มีทั้ง code ที่ต้อง connect กัน แล้วให้รู้กันได้ รูปแบบข้อมูลในการส่ง ว่าจะต้องส่งอะไรไปก่อนหลัง การ authenication กัน ว่ามีสิทธ์ที่จะผ่านเข้ามาได้หรือไม่ได้ โอ้ย เพียบไปหมด แต่นั้นเราไม่จำเป็นต้องรู้ นั่นแหละคือ API
เรารออยู่อย่างเดียวคือ return value ก็พอแล้ว
ตัวอย่างข้างบนก็เป็นตัวอย่างที่ให้พอได้เข้าใจเฉยๆ นะ API นั้นจะว่าให้ลึกๆ สลับซับซ้อนแล้วก็ หลากหลายรูปแบบมาก ยกตัวอย่าง API ใหม่ๆ เช่น Web Service เป็นต้น Web Service เองจะว่าไปก็ API ดีๆ นี่เอง แต่การเรียกใช้ การติดต่อนั้นต่างกันฟ้ากับก้นเหวเลย
ใช้งาน Twitter API ด้วย PHP ผ่าน cUrl
การใช้งาน Twitter API นั้นง่ายที่สุดแล้ว แต่ จะว่าไป ก็ ยังยากสำหรับมือใหม่อยู่ดี วันนี้เลยจะมาเสนอ twitter api บรรทัดเดียวให้ดูกันว่า twitter API นั้นใช้งานง่ายจิงๆ
ก่อนอื่นเลย สิ่งที่จะต้องใช้ในงานนี้คือ
- ภาษาเขียนโปรแกรมอะไรก็ได้นะที่ execute command ได้
- ความรู้ในการต่อ string
- สามารถใช้ cUrl ได้
งั้นเรามาเขียนกันเลย
การเขียนนั้นง่ายแสนง่ายเพราะ cUrl นั่้นง่ายนิดเดียว เราจะมีหลักการเขียนที่ว่า
curl –basic –user USERNAME:PASS –data status=”MESSAGE” http://twitter.com/statuses/update.xml
ง่ายๆแค่นี้เอง
แล้วเราก็ทำ form ให้ส่งค่าข้อมูลไป หรือ จะเอาข้อมูลมาจากใหนก็ได้ โดยจะแสดงตัวอย่างเป็น PHP นะง่ายดี
<?php
if($_POST['message'] != ”){
$message = $_POST['message'];
$username = $_POST['username'];
$password = $_POST['password'];$command = ‘curl –basic –user ‘.$username.’:’.$password.’ –data status=”‘.$message.’” http://twitter.com/statuses/update.xml’;
$retval = system($command);
echo $command;
echo ‘<br />’;
echo $retval;}
?>
<form name=”twitterForm” action=”" method=”post” enctype=”multipart/form-data”>
message. <input type=”text” name=”message” value=”" /><br />
username. <input type=”text” name=”username” value=”" /><br />
password. <input type=”text” name=”password” value=”" /><br /><input type=”submit” value=”OK” />
</form>
อย่างนี้เป็นต้นนะครับผม
ลองเล่นๆกันดู post เข้าไปเลย twitter อ่ะ มันส์ ช่วย SEO ได้ด้วยนะ
ปล. web hosting ส่วนใหญ่ใช้ apache และจะ config saft_mode เป็น on จะไม่สามารถใช้ system(), exec(), shell_exec() ได้ ให้ดูด้วยนะว่าใช้ได้เปล่า
twitpic api test – curl
อิอิ วันนี้ว่างมากๆ เลยมั้งนั่งเขียน อะไรเล่นใหญ่เลยคราวนี้มาเป็น twitpic บ้างเพราะ twitter เองนั้นทำ api ให้เราได้ใช้กันแบบง่ายมากๆ คุณ sugree ยังบอกเลยว่ามันง่ายมำให้คนใช้งานได้ง่ายๆ ทำให้ดังได้ง่ายๆ หุหุ
แล้วผมเองก็เขียน PHP ด้วยมาดูกันเลยแล้วกันครับว่า เป็นไงบ้าง
<?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 ‘url’ or ‘contents’ for the parameter
var $type;
// function with the default parameter value
function xx_xml($url=’http://www.opocot.com’, $type=’url’) {
$this->type = $type;
$this->url = $url;
$this->parse();
}
// parse XML data
function parse()
{
$data = ”;
$this->parser = xml_parser_create();
xml_set_object($this->parser, $this);
xml_set_element_handler($this->parser, ‘startXML’, ‘endXML’);
xml_set_character_data_handler($this->parser, ‘charXML’);
xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false);
if ($this->type == ‘url’) {
// if use type = ‘url’ now we open the XML with fopen
if (!($fp = @fopen($this->url, ‘rb’))) {
$this->error(“Cannot open {$this->url}”);
}
while (($data = fread($fp, 8192))) {
if (!xml_parse($this->parser, $data, feof($fp))) {
$this->error(sprintf(‘XML error at line %d column %d’,
xml_get_current_line_number($this->parser),
xml_get_current_column_number($this->parser)));
}
}
} else if ($this->type == ‘contents’) {
// Now we can pass the contents, maybe if you want
// to use CURL, SOCK or other method.
$lines = explode(“\n”,$this->url);
foreach ($lines as $val) {
if (trim($val) == ”)
continue;
$data = $val . “\n”;
if (!xml_parse($this->parser, $data)) {
$this->error(sprintf(‘XML error at line %d column %d’,
xml_get_current_line_number($this->parser),
xml_get_current_column_number($this->parser)));
}
}
}
}
function startXML($parser, $name, $attr) {
$this->stack[$name] = array();
$keys = ”;
$total = count($this->stack)-1;
$i=0;
foreach ($this->stack as $key => $val) {
if (count($this->stack) > 1) {
if ($total == $i)
$keys .= $key;
else
$keys .= $key . ‘|’; // The saparator
}
else
$keys .= $key;
$i++;
}
if (array_key_exists($keys, $this->data)) {
$this->data[$keys][] = $attr;
} else
$this->data[$keys] = $attr;
$this->keys = $keys;
}
function endXML($parser, $name) {
end($this->stack);
if (key($this->stack) == $name)
array_pop($this->stack);
}
function charXML($parser, $data) {
if (trim($data) != ”)
$this->data[$this->keys]['data'][] = trim(str_replace(“\n”, ”, $data));
}
function error($msg) {
echo “<div align=\”center\”>
<font color=\”red\”><b>Error: $msg</b></font>
</div>”;
exit();
}
}
if(isset($_POST)){
if (!empty($_FILES['media']['name'])) {
$localfile = $_FILES['media']['tmp_name'];
if (!copy($localfile, $_FILES['media']['name'])) {
echo “failed to copy $file…\n”;
}
$localfile = $_FILES['media']['name'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, “http://twitpic.com/api/uploadAndPost”);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// same as <input type=”file” name=”file_box”>
$post = array(
“media”=> ‘@’.getcwd().’/’.$localfile,
“username”=> $_POST['username'],
"password"=> $_POST['password'],
"message"=> $_POST['message'],
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$response = curl_exec($ch);
curl_close($ch);
$content = new xx_xml($response, ‘contents’);
$status = $content->data['rsp']['status'];
$imageUrls = $content->data['rsp|mediaurl']['data'];
unlink(getcwd().’/’.$localfile);
foreach($imageUrls as $url){
header(“Location: “.$url);
exit();
}
}
}
?>
<form name=”twitterForm” action=”" method=”post” enctype=”multipart/form-data”>
media. <input type=”file” name=”media” /><br />
username. <input type=”text” name=”username” value=”" /><br />
password. <input type=”text” name=”password” value=”" /><br />
message. <input type=”text” name=”message” value=”" /><br />
<input type=”submit” value=”OK” />
</form>
อิอิ แค่ง่ายๆ นะไม่ได้ยุ่งยากอะไรมาก ก็คือ ปกติแล้วเราจะต้องส่งไปแบบหน้า post จาก form ปกติ แต่คราวนี้เรามา post แบบ cUrl ไว้ (ตรวจสอบดูก่อนนะว่า web server ได้ลง cUrl เปล่าไม่ลงใช้ไม่ได้นะ) แล้วก็ทำการ postเหมือน form เลย
ใครจะลองเอาไปทำอะไรเล่นก็เอานะลองเข้าไปดูตัวอย่างเล่นๆ ได้ที่ http://www.meteenee.com/twitterapi/
