解析从 imageshack API 返回的数据
Posted
技术标签:
【中文标题】解析从 imageshack API 返回的数据【英文标题】:Parsing data returned from imageshack API 【发布时间】:2010-11-05 11:31:44 【问题描述】:我需要您出色的网络开发洞察力。我正在使用 Imageshack API,并设法使用表单将图像从我的服务器上传到 imageshack 服务器,它返回给我一个相当混乱的数据。
现在我的问题是,我该怎么做才能得到我需要的东西。我必须解析它吗?我讨厌正则表达式(但如果必须,我会处理它)。如果我必须解析它,我将如何将整个字符串发送到函数?我有点困惑。
<form method="post" enctype="multipart/form-data" action="http://www.imageshack.us/upload_api.php">
<p><input type="file" name="fileupload"></p>
<p><input type="text" name="tags" value="proba,test"></p>
<p><input type="text" name="key" value="xxxxxxxxxxxxxxxxxxxxxxxxxx"></p>
<p><select name="optsize">
<option value="320x240">Small (320x240)</option>
<option value="426x320" selected>Medium (426x320)</option>
<option value="640x480">Big (640x480)</option>
</select></p>
<p><input type="submit" value="Go"></p>
</form>
我得到的数据看起来像这样。
http://img574.imageshack.us/img574/3084/18835698.png
我想我的问题确实是,每当用户按下提交按钮时,它就会给他那个垃圾,我如何动态解析它,并给他一个漂亮的结果。
【问题讨论】:
查看页面来源并添加另一个屏幕截图,我们需要查看数据是什么格式。 @RobertPitt 根据他们添加到问题中的标签,看起来像是 XML。 【参考方案1】:您应该使用允许您使用 CURL 库或更简单的 Ajax 函数的动态页面。
例如,使用 PHP 的 CURL 传递所有内容后,您可以使用 simpleXML 从返回的 XML 页面获取 url。
【讨论】:
【参考方案2】:根据您问题上的标签,我将假设返回的数据是 XML,并建议您查看原生 PHP SimpleXML 函数来解析响应。
PHP 手册包含一个基本示例,可以帮助您入门:Basic usage
【讨论】:
【参考方案3】:您想在 PHP 运行时执行此操作。
在你有了你的xml之后,这里有一个小函数可以用来获取信息:
/**
* parsing XML response for info about uploaded file
* image_link - URL address of uploaded image on imageshack server
* thumb_link - URL address of thumbnail of uploaded image on imageshack server
* yfrog_link - URL address of uploaded image on yfrog server
* yfrog_thumb - URL address of thumbnail of uploaded image on yfrog server
* ad_link - URL address of imgaeshack page with uploaded image
* done_page - URL address of thumbnail of uploaded image on imageshack server
* width - width of uploaded image [px]
* height - height of uploaded image [px]
*/
function getInfo($xml,$key)
preg_match('/<'.$key.'>(.*)<\/'.$key.'>/', $xml, $value);
if (empty($value[0]))
return('invalid key');
else
return(strip_tags($value[0]));
函数来源:http://www.sourcer.cz/ci-lib/imageshack/
用法是这样的:
$xml = file_get_contents('http://www.imageshack.us/upload_api.php?url=http://www.mysite.com/myimage.png');
$image_link = getInfo($xml,'image_link');
【讨论】:
感谢大家的快速回复,不过这里有个问题......我如何获取数据来解析它。我猜我必须为此使用 CodeIgniter Imageshack 库。 不,我已经从那个库中提取了一个方法供你使用,你不需要 CI,我只是参考了别人的工作。【参考方案4】:啊,谢谢,我现在明白了。我做了一些进一步的研究,另一种方法可能是像这样使用 curl:
使用 cURL 将帖子发送到“http://www.imageshack.us/upload_api.php”
$data['key'] = API_KEY;
$data['public'] = "yes";
$data['xml'] = "yes";
$data['fileupload'] = '@'.$dest;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.imageshack.us/upload_api.php');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 600);
/*curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);*/
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($curl);
curl_close($curl);
【讨论】:
@Robert,你的方法看起来更简单。 啊,好吧,我现在明白了...我必须允许用户将文件上传到我的服务器,然后从 url 生成 xml(基于我的服务器)。我希望绕过我的服务器的使用以使事情更安全。我可以检查文件是否以 .jpg、.png 等结尾。但这仍然不能使它安全,不是吗?也许我可以用 curl 生成 $xml。然后使用 getinfo() 函数?【参考方案5】:你需要的都在这个链接里:
http://code.google.com/p/imageshackapi/source/browse/RedirectAPI.wiki?repo=wiki
你应该把这个放在表格里
<input type="hidden" name="success_url" value="mysite.com/success.php?var1=%s&var2=%b&var3=%i">;
<input type="hidden" name="error_url" value="error.php">
<input type="hidden" name="optsize" id="optsize" value="200x380"/>
<input type="hidden" name="optimage" id="optimage" value="1"/>
<input type="hidden" name="rembar" id="rembar" value="1"/>
获取图片地址:
$img_url="http://img$var1.imageshack.us/img$var1/$var2/$var3";
获取缩略图:
$var3= str_replace (".jpg", ".th.jpg", $var3);
$var3= str_replace (".gif", ".th.gif", $var3);
$var3= str_replace (".png", ".th.png", $var3);
$tumb_url="http://img$var1.imageshack.us/img$var1/$var2/$var3";
【讨论】:
你能提供一些关于你的链接的上下文吗?以上是关于解析从 imageshack API 返回的数据的主要内容,如果未能解决你的问题,请参考以下文章