wordpress 远程图片抓取

2014年3月20日 分类: Wordpress (124 个脚步)

在很多时候,看到好的文章想转载过来到自己的博客上。但是由于复制的时候,图片等资源还是源站点的链接,一旦源站不能访问或者删除了,就不能正常的访问了。

所以就有了很多将远程文件抓取到自己的博客上,并替换相关链接。

但事实上,现在wordpress现存的插件都是使用内置的图片上传。这个对于伪静态是postname的人来说没啥大问题。

不过对于用id作为伪静态或者是追求对id的连续性的人来说,这就是一个让人崩溃的事情了。就必须得人工下载图片,并用ftp等工具上传,再把图片资源的连接修改。麻烦不说,还容易出现修改错误。

所以我就在现有插件的情况下,移除使用wordpress 内置的上传功能,改用curl的方式来对图片资源的抓取,并修改图片的链接到本地url上。

wordpress 还是尽量少用插件,所以我就在functions.php文件中实现了。

首先是curl抓取图片内容部分,这里使用了多线程来达到快速抓取

需要注意的是,你可以使用CURLOPT_FOLLOWLOCATION 这个选项来对有转跳的图片进行抓取,因为我使用了open_basedir功能,所以就不能用这个选项了。

add_action('publish_post', 'fetch_images');
function fetch_images( $post_ID ) {    
    //Check to make sure function is not executed more than once on save
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
        return;
    }
    
    if ( !current_user_can('edit_post', $post_ID) ) {
        return;
    }
    
    remove_action('publish_post', 'fetch_images');    
    $post = get_post($post_ID);
    $first_image = array();

    if(preg_match_all('//i', $post->post_content, $matches)){
        if(is_array($matches [1])) {
            $first_image = $matches [1];
        }
    }
    
    $imgarr = array();
    foreach ($first_image as $url){
        if (strpos($url, $_SERVER['HTTP_HOST'])===false) {
            $imgarr[] = $url;
        }
    }
    
    //根据$data数组中保存的图片文本流数据生成相应图片
    $data = Curl_down_image($imgarr, $timeout='30');
    foreach ((array)$data as $k => $v){
        if($v !=''){ //图片数据存在
            file_put_contents(ABSPATH.'/wp-content/uploads/remoteimage/'.$k, $v);
        }
    }
    unset($data);
    
    foreach ($imgarr as $k => $url) {
        $name = array_pop(explode('/', $url));
        $post->post_content = str_replace($url, get_bloginfo('url').'/wp-content/uploads/remoteimage/'.$name, $post->post_content);
    }

    wp_update_post(array('ID' => $post_ID, 'post_content' => $post->post_content));
    add_action('publish_post', 'fetch_images');
}

在这个函数中,你需要修改的是存放远程图片的路径。如果不想改,也可以保持这个样子。 接下来就是要手工的新建对应的目录了,还要注意目录的权限问题,要不然图片就不能保存了。

上面的修改完成后,就可以在编辑一下文章或者新建一篇文章,里面需要包含了外链的图片。 保存后看编辑框是否显示出原来的图片,或者查看源代码看链接是否修改过来了。也可以到网站对应存放路径看是否有图片存在。

OK,全部修改完成,妈妈再也不用担心我的id不连续了。

wordpress 远程图片抓取 【声明】本文 wordpress 远程图片抓取 为柠之漠然原创文章,转载请注明出自 枫之落叶
并保留本文有效链接:https://blog.shiniv.com/2014/03/get-remote-image-for-wordpress/ , 转载请保留本声明!

标签: , , ,
目前还没有任何评论.
你必须要启用 Javascript