【问题标题】:Verify URL is direct image URL from Bing Search API?验证 URL 是来自 Bing Search API 的直接图像 URL?
【发布时间】:2012-12-11 20:19:47
【问题描述】:

我正在尝试使用必应搜索 API 来允许用户将必应图像与网站上的内嵌帖子相关联,一旦他们从那里搜索中选择图像,它就会将其保存到服务器以供使用。但有时使用必应搜索结果返回的“MediaUrl”不一定是图像。

示例1)搜索关键字Nascar
返回两个图像:
1) www.betbigdc.com/wp-content/uploads/2010/02/nascar1.jpg <img src=''> 工作。
2) http://images4.fanpop.com/image/photos/23900000/NASCAR-nascar-23962589-425-425.jpg .. 该网址实际上加载到 www.fanpop.com/clubs/nascar/images/23962589/title/nascar-photo?ir=true..

示例2)搜索关键字Jason Aldean
返回两个图像:
1) www.greenobles.com/data_images/jason-aldean/jason-aldean-01.jpg <img src=''> 中工作的实际图片网址。
2) http://www.cmtradiolive.com/wp-content/uploads/2009/10/jason-aldean.jpg 实际加载网页的有趣网址。

<?php
// Search Bing Api 
$articles = sitesearch('Jason Aldean', $_SERVER['HTTP_HOST'], $accountKey, 4);
$i        = 0;
// Process Results starting with reszing image within aspect ration to display to user
foreach ($articles['d']['results'] as $article) {
    $i++;

    $dimensions    = array(
        $article['Width'],
        $article['Height']
    );
    $dimensionsNew = array(
        125,
        125
    );

    // What scale do we need to go to
    $scaleRequired = min($dimensionsNew[0] / $dimensions[0], $dimensionsNew[1] / $dimensions[1]);

    if ($scaleRequired < 1) {
        $twidth  = $dimensions[0] * $scaleRequired;
        $theight = $dimensions[1] * $scaleRequired;

        // Resize to $finalDimensions

    } else {
        $twidth  = $article['Width'];
        $theight = $article['Height'];
    }
    // Display images resized within ration to =< 125PX
    echo "<img alt='bimage' width='$twidth' height='$theight' src='" . $article['MediaUrl'] . "' style='magin:     10px !important; 
       border: thin solid #666666;' />&nbsp;&nbsp;";

}
?>

有什么方法可以验证给定的 url 是否是直接图片 url?!

【问题讨论】:

    标签: php javascript jquery api bing


    【解决方案1】:

    有什么方法可以验证给定的 url 是否是直接图像 网址?!

    您还可以分析响应本身。它看起来像这样:

    /**
     *
     * @return boolean Whether image is "pure"
     */
    function is_image_url($url, array $extensions){
    
        $response = get_headers($url, 1);
    
        foreach($response as $key => $value){
    
             foreach($extension as $ext){
    
                  if (stripos($value, $ext) !== FALSE){
                      return TRUE;
                  }
             }
       }
    
       return FALSE;
    }
    
    //Usage:
    
    $extensions = array('jpg', 'gif', 'bmp');
    
    if ( is_image_url('http://exampe.com/image.jpg', $extensions) === TRUE ){
       // It is. Do some stuff here
    }
    

    【讨论】:

    • 哇,我不知道有一个get_headers 函数,这比我冗长的curl 解决方案要好得多。投票!
    • @LotusH 根据我的测试,实际上 curl 有点快。 get_headers() 应该用作“最后的机会”,例如,当 curl 未安装或用户不想抓住它时。
    • 我刚刚阅读了get_headers 的文档,我认为您必须为get_headers 设置第二个参数1 来设置返回值的键,否则结果将被nubers 索引;)
    【解决方案2】:

    您可以使用curl 来确定这一点。

    1. 初始化时,将curl_setopt中的CURLOPT_FOLLOWLOCATION设置为false,让curl不跟随重定向。

    2. CURLOPT_HEADERtrue 以包含返回标头信息。

    3. 判断是否设置了Location header。

    4. 对于像http://www.cmtradiolive.com/wp-content/uploads/2009/10/jason-aldean.jpg这样的URL直接引导你到另一个内容而不跳转,你可以通过返回头中的Content-type来判断内容是否为图片。

      李>

    关于curl的详细信息:http://www.php.net/manual/en/book.curl.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-05
      • 2020-08-04
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多