simple html domで情報を取得・WPに保存
PR
simple html domを使用して指定サイトから、情報を取得する必要があったのでメモ。
設定の方法等については、PHP Simple HTML DOM Parserをご確認ください。
取得の仕方
必要なファイルを、アップし読み込みます。 情報を取得したいURLを記述して、 取得したいタグを指定すれば完了です。
$get_dir_path = dirname(__FILE__);
$pass = $get_dir_path.'/simple_html_dom.php';
require_once $pass;
$html = file_get_html('URLを記載');
$find_title = $html_sub->find('取得したいタグ');
foreach($find_title as $e){
$t = $e->plaintext; //テキストで取得
$title = array($t);
}
var_dump($title); // タイトル情報を取得
WP上で取得した情報を保存
情報を取得し、投稿上にデータを保存します。 もし、情報が既に存在しない場合は削除するようにしました。
/**********
情報取得
***********/
$find_a = $html->find('取得したいhtmlを指定');
//urlからid取得
foreach($find_a as $e){
$url = $e->href;
//URLからIDを取得
$num = preg_replace('/[^0-9]/', '', $url);
$url_array[] = array('id'=>$num,'url'=>$url);
}
/**********
投稿IDを取得
**********/
$args = array(
'posts_per_page' => -1,
'post_type' => 'post',
'post_status' => 'publish',
);
$posts_array = get_posts( $args );
$post_ID = array();
//投稿ID抽出
foreach ($posts_array as $post ) {
setup_postdata( $post );
$post_ID[] = $post->post_name;
}
wp_reset_postdata();
$post_ID_data = $post_ID;
/*****
取得サイトに既に情報がなければ
自サイトの投稿を削除
*****/
foreach($post_ID_data as $v){
$post_chk = in_array( $v , array_column( $url_array, 'id'));
$args = array( 'post_type' => 'POST', 'name' => $v);
$posts = get_posts( $args );
if($post_chk === false ){
if ( $posts ) {
$id = $posts[0]->ID;
$dele_post = array(
'ID' => $id, // ID
'post_name' => $v, // name
'post_status' => 'trash',
'post_type' => 'post',
);
wp_update_post( $dele_post );
}
}
}
/*****
投稿情報の取得
*****/
$custonm_field = array();
foreach($url_array as $val){
$id = $val['id'];
$url = $val['url'];
$post_ID_result = in_array($id, $post_ID_data, true);
$custonm_field['id'] = $id;
//新規投稿
if($post_ID_result === false ){
$html_sub = file_get_html($url);
//タイトル
$title = array();
$find_title = $html_sub->find('取得したいタグ');
foreach($find_title as $e){
$t = $e->plaintext;
$title = array($t);
}
//本文
$html = '';
$find_copy = $html_sub->find('取得したいタグ');
foreach($find_copy as $e){
$html .= $e->innertext;
}
$find_txt = $html_sub->find('取得したいタグ'); //募集情報
if(!empty($find_txt)){
$txt = '';
foreach($find_txt as $e){
$txt = $e->outertext;
$custonm_field['job_info'] = $txt;
}
}
/***
投稿設定
***/
//投稿
$posts = array(
'post_content' => $html, // 全文
'post_name' => $id ,//スラッグ
'post_title' => $title[0], //タイトル
'post_status' => 'publish',
'post_type' => 'post',
'post_author' => 'ユーザー' // 作成者のユーザー
);
$post_new_id = wp_insert_post( $posts ); //投稿を追加してIDを発行
//カスタムフィールド の値
update_field('info',$custonm_field['info'], $post_new_id);
} else {
//それ以外の処理
}
}
$html->clear(); //クリア