Posts Tagged ‘twitpic’
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/