自动从其它站点RSS抓取文章

自动从其它站点RSS抓取文章

代码基本原理,新建一个自定义分类法“shot”,自动从另一个站点的RSS抓取文章,放在一个数组中,再用这个数组创建“shot”文章,并为文章添加自定义栏目image和link_url,方便调用缩略图和原文链接。

将下面代码添加到当前主题functions.php中即可。

  1. <?
  2. /* Post Type
  3.    ------------------------------------------------------------------------------------ */
  4. add_action( 'init', 'register_cpt_shot' );
  5. function register_cpt_shot() {
  6.     $labels = array(
  7.         'name' => _x( 'Dribble Shots', 'shot' ),
  8.         'singular_name' => _x( 'Dribbble Shot', 'shot' ),
  9.         'add_new' => _x( 'Add New', 'shot' ),
  10.         'add_new_item' => _x( 'Add New Dribbble Shot', 'shot' ),
  11.         'edit_item' => _x( 'Edit Dribbble Shot', 'shot' ),
  12.         'new_item' => _x( 'New Dribbble Shot', 'shot' ),
  13.         'view_item' => _x( 'View Dribbble Shot', 'shot' ),
  14.         'search_items' => _x( 'Search Dribble Shots', 'shot' ),
  15.         'not_found' => _x( 'No dribble shots found', 'shot' ),
  16.         'not_found_in_trash' => _x( 'No dribble shots found in Trash', 'shot' ),
  17.         'parent_item_colon' => _x( 'Parent Dribbble Shot:', 'shot' ),
  18.         'menu_name' => _x( 'Dribble Shots', 'shot' ),
  19.     );
  20.     $args = array(
  21.         'labels' => $labels,
  22.         'hierarchical' => false,
  23.         'supports' => array( 'title', 'custom-fields' ),
  24.         'public' => true,
  25.         'show_ui' => true,
  26.         'show_in_menu' => true,
  27.         'show_in_nav_menus' => false,
  28.         'publicly_queryable' => true,
  29.         'exclude_from_search' => false,
  30.         'has_archive' => true,
  31.         'query_var' => true,
  32.         'can_export' => true,
  33.         'rewrite' => true,
  34.         'capability_type' => 'post'
  35.     );
  36.     register_post_type( 'shot', $args );
  37. }
  38. /* Import Shots via RSS
  39.    ------------------------------------------------------------------------------------ */
  40. // grab the image src from teh description
  41. function get_image($string) {
  42.     preg_match_all('/<img[^>]+>/i',$string$result);
  43.     $img = array();
  44.     foreach$result[0] as $img_tag)
  45.     {
  46.         preg_match_all('/(src)=("[^"]*")/i',$img_tag, $img[$img_tag]);
  47.     }
  48.     return trim($img[$img_tag][2][0], '"');
  49. }
  50. // create an array of the feed items
  51. include_once(ABSPATH . WPINC . '/feed.php');
  52. $feed = fetch_feed('http://dribbble.com/tammyhart/shots.rss');
  53. $feed = $feed->get_items(0);
  54. $shots = array();
  55. foreach ( $feed as $item ) :
  56. $shots[$item->get_date('Ymd')] = array(
  57.     'id'    => $item->get_date('Ymd'),
  58.     'url'   => esc_url( $item->get_permalink() ),
  59.     'date'  => $item->get_date('Y-m-d H:i:s'),
  60.     'title' => esc_html( $item->get_title() ),
  61.     'image' => get_image($item->get_description())
  62.     );
  63. endforeach;
  64. // create posts from our array
  65. foreach ($shots as $shot) {
  66.     $shot_post = array(
  67.         'post_type'     => 'shot',
  68.         'post_status'   => 'publish',
  69.         'post_author'   => 1,
  70.         'post_title'    => $shot['title'],
  71.         'post_date'     => $shot['date']
  72.         );
  73.     $shot_post_meta = array(
  74.         'link_url'  => $shot['url'],
  75.         'image'     => $shot['image']
  76.         );
  77.     $posts = get_posts(
  78.         array(
  79.             'post_type' => 'shot',
  80.             'meta_key'  => 'link_url',
  81.             'meta_value'=> $shot_post_meta['link_url']
  82.             )
  83.         );
  84.     if (count($posts) == 0) {
  85.         $post_id = wp_insert_post($shot_post);
  86.         add_post_meta($post_id, 'link_url', $shot_post_meta['link_url'], true);
  87.         add_post_meta($post_id, 'image', $shot_post_meta['image'], true);
  88.     }
  89. }
  90. ?>

修改第66行的”http://dribbble.com/tammyhart/shots.rss“为准备抓取文章站点的RSS地址,还可以修改第80行后的”shot“为你所用主题自定义分类法名称,抓取的文章会自动添加到该分类法中。

上述代码中并没有抓取文章内容的功能,仅供参考学习之用。

weinxin
我的微信
分享交流WordPress经验与技巧,关注前端设计与网站制作。仅用于功能演示。
Begin主题购买
Begin主题购买

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:28   其中:访客  28   博主  0

    • avatar 云落 来自天朝的朋友 Safari浏览器  Android 4.4.4 MI 2S Build/KTU84P 江苏省无锡市 电信 2

      类似采集是吧

      • avatar 星岩博客 来自天朝的朋友 谷歌浏览器  Android 4.4.4 HM NOTE 1LTE Build/KTU84P 浙江省 移动 2

        有了这段代码,不用自己写代码,就能给自己的网站添加这一功能了。

        • avatar Koolight 来自天朝的朋友 Safari浏览器  Android 4.4.2 PE-CL00 Build/HuaweiPE-CL00 湖北省武汉市 鹏博士长城宽带 4

          这个相当于采集了?

          • avatar boke112导航 来自天朝的朋友 谷歌浏览器 Windows 7 广西南宁市 电信 5

            有了这个功能,感觉可以聚合一些比较多干货文章的站点资源

            • avatar 软膜天花 来自天朝的朋友 谷歌浏览器 Windows 7 广东省广州市 电信 4

              测试一下,合不适我的网站用!

              • avatar 墨丶水瓶 来自天朝的朋友 火狐浏览器 Windows 8 北京市 电信通 4

                :grin: 这是一个邪恶的功能

                • avatar hi 来自天朝的朋友 火狐浏览器5.0 Windows 7 广东省深圳市 移动 0

                  你好,GK

                  • avatar 通宝娱乐下载 这家伙可能用了岛国的代理 谷歌浏览器 Windows 10 日本 亚太环通(Pacnet)有限公司 1

                    博主确实太厉害了,只能膜拜了!

                    • avatar 叮咚博客 来自天朝的朋友 谷歌浏览器 Windows 7 广东省东莞市 鹏博士长城宽带 0

                      这个可以有哦!

                      • avatar 百度 来自天朝的朋友 谷歌浏览器 Windows 7 浙江省杭州市 电信 1

                        发的郭德纲

                        • avatar fsfs 来自天朝的朋友 谷歌浏览器 Windows 7 浙江省杭州市 电信 1

                          ffffffffffffffffffffffffdsfs发的方法是打发

                          • avatar 李光春 来自天朝的朋友 谷歌浏览器 Windows 7 广东省茂名市 电信 2

                            这功能不错

                            • avatar baojhud 来自天朝的朋友 谷歌浏览器 Windows 10 浙江省杭州市 阿里云BGP数据中心 0

                              安防V的发挥个人与他人色儿

                              • avatar 钊林IT 来自天朝的朋友 谷歌浏览器 Windows 8.1 浙江省杭州市 阿里云BGP数据中心 3

                                这个功能有点类似如果可以获取到他人网站对应文章链接和文章标题,感觉更神奇(不涉及版权情况下),将同类优质的文章推荐给更多人阅读。。

                                • avatar 电我 来自天朝的朋友 谷歌浏览器 Windows 10 浙江省杭州市 阿里云BGP数据中心 2

                                  怎么抓取多个网站的内容?

                                  • avatar 哈哈大笑 来自天朝的朋友 谷歌浏览器 Windows 7 浙江省杭州市 阿里云BGP数据中心 0

                                    请问博主,怎样才能像你这个发布文章的时候插入代码块。是wordpress的。

                                    • avatar 恒创主机7折 来自天朝的朋友 谷歌浏览器 Windows 10 浙江省杭州市 阿里云BGP数据中心 6

                                      好强大的功能

                                      • avatar 恒创主机7折 来自天朝的朋友 谷歌浏览器 Windows 10 浙江省杭州市 阿里云BGP数据中心 6

                                        呵呵 下一个版本 集合到主题里面去

                                        • avatar 乐乎哉 来自天朝的朋友 谷歌浏览器 Windows 10 浙江省杭州市 阿里云BGP数据中心 1

                                          这个方法好。避免使用插件,给网站减轻负担,又能实现功能,挺好的。

                                          • avatar 幅度高达 来自天朝的朋友 谷歌浏览器 Windows 7 浙江省杭州市 阿里云BGP数据中心 0

                                            持续长

                                            • avatar 快启动论坛 来自天朝的朋友 谷歌浏览器 Windows 7 浙江省杭州市 阿里云BGP数据中心 3

                                              这个厉害了,要是能抓内容,完整版的就更好了

                                              • avatar hostus 来自天朝的朋友 火狐浏览器 Windows 10 浙江省杭州市 阿里云BGP数据中心 0

                                                这个功能挺好的,适合聚合内容。如果能多个RSS资源目标一起就好了。

                                                • avatar Dazi 来自天朝的朋友 谷歌浏览器 Ubuntu Linux 浙江省杭州市 阿里云BGP数据中心 1

                                                  测试一下看看

                                                  • avatar 乐赚网 来自天朝的朋友 谷歌浏览器 Windows 7 浙江省杭州市 阿里云BGP数据中心 1

                                                    给力

                                                    • avatar 来自天朝的朋友 QQ浏览器 Windows 7 广东省珠海市 电信 0

                                                      博主的渐显是怎么实现的