Last active
December 12, 2015 19:17
-
-
Save bzz0217/d8ae39ee5fb1d8fba468 to your computer and use it in GitHub Desktop.
QiitaAPIで取得した記事情報・ユーザ情報をDB登録
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
ini_set("display_errors", 1); | |
error_reporting(-1); | |
ini_set("max_execution_time", 0); | |
require 'vendor/autoload.php'; | |
$app = new \Slim\Slim(array( | |
'debug' => true | |
)); | |
function dbInsert($row, $user){ | |
ORM::configure(array( | |
'connection_string' => 'mysql:host=localhost;dbname=qiita', | |
'username' => 'xxxx', | |
'password' => 'xxxx', | |
'driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'), | |
'error_mode', PDO::ERRMODE_WARNING, | |
'logging', true | |
)); | |
//記事登録 | |
$items = ORM::for_table('items')->where_equal('item_id', $row['item_id'])->find_one(); | |
if (!$items){ | |
//未登録の記事は登録 | |
$items = ORM::for_table('items')->create(); | |
$items->set($row); | |
$items->save(); | |
} | |
//ユーザ情報登録 | |
$users = ORM::for_table('users')->where_equal('user_id', $user['user_id'])->find_one(); | |
if (!$users){ | |
//未登録のユーザは登録 | |
$users = ORM::for_table('users')->create(); | |
$users->set($user); | |
echo " 登録<br>"; | |
}else{ | |
//登録済のユーザは更新 | |
$users->set($user); | |
echo " 更新<br>"; | |
} | |
$users->save(); | |
} | |
$app->get('/batch/today', function(){ | |
//qiita 1日分投稿情報取得 | |
$context = stream_context_create(array( | |
"http" => array( | |
'method' => 'GET', | |
'header' => implode("\r\n", array( | |
'Content-Type: application/x-www-form-urlencoded', | |
'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' | |
)) | |
) | |
)); | |
//取得する投稿範囲 | |
$yesterday = date("Y-m-d", strtotime('-1 day')); | |
$start = strtotime( $yesterday . ' 00:00:00' ); | |
$end = strtotime( $yesterday . ' 23:59:59' ); | |
$target_items = array(); | |
$loop_end_flg = 0; | |
//Qiitaでのページ数制限が100(最大10000記事取得) | |
//前日投稿された記事を取得する | |
for ($p=1; $p<=100; $p++){ | |
$api_url = 'http://qiita.com/api/v2/items?per_page=100&page=' . $p; | |
$items = file_get_contents($api_url, false, $context); | |
if (!empty($items)){ | |
$items_arr = json_decode($items, true); | |
for ($itm=0; $itm<count($items_arr); $itm++){ | |
//作成日時の形式を変換 | |
$created_at_unixtime = strtotime( $items_arr[$itm]['created_at'] ); | |
if ($start<=$created_at_unixtime && $end>=$created_at_unixtime){ | |
$target_items[] = $items_arr[$itm]; | |
} | |
if ($start>$created_at_unixtime){ | |
//昨日分の範囲から外れた為終了 | |
$loop_end_flg = 1; | |
break; | |
} | |
} | |
} | |
if ($loop_end_flg==1){ | |
break; | |
} | |
} | |
function tag_csv($tags){ | |
$csv = ""; | |
for ($t=0; $t<count($tags); $t++){ | |
if ($csv!=""){ | |
$csv .= ","; | |
} | |
$csv .= $tags[$t]['name']; | |
} | |
return $csv; | |
} | |
if (!empty($target_items)){ | |
//DBへ記事情報の登録 | |
for ($tgt=0; $tgt<count($target_items); $tgt++){ | |
$tag_csv = tag_csv($target_items[$tgt]['tags']); | |
//作成日時の形式を変換 | |
$date = new DateTime($target_items[$tgt]['created_at']); | |
$item_created_at = $date->format('Y-m-d h:i:s'); | |
//更新日時の形式を変換 | |
$date = new DateTime($target_items[$tgt]['updated_at']); | |
$item_updated_at = $date->format('Y-m-d h:i:s'); | |
$row = array( | |
"item_id" => $target_items[$tgt]['id'], | |
"title" => $target_items[$tgt]['title'], | |
"body" => $target_items[$tgt]['body'], | |
"tags" => $tag_csv, | |
"url" => $target_items[$tgt]['url'], | |
"user_id" => $target_items[$tgt]['user']['id'], | |
"item_created_at" => $item_created_at, | |
"item_updated_at" => $item_updated_at | |
); | |
//Insert時データないとNULL制約でエラーになるケースある為 | |
//データなければセットしない | |
$user = array(); | |
foreach ($target_items[$tgt]['user'] as $key => $value){ | |
if ($key=="id"){ | |
$user['user_id'] = $value; | |
}else{ | |
if (!empty($value)){ | |
$user[$key] = $value; | |
} | |
} | |
} | |
//DB登録処理(未登録の記事の場合) | |
dbInsert($row, $user); | |
} | |
} | |
}); | |
$app->run(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment