/** * 抓去豆瓣数据 by api */ public function actionDouban() { $api = new ApiDouban(); $mvSpider = MvSpider::find()->where(['status' => 0])->orderBy('id asc'); $total = $mvSpider->count(); $page = 1; $pageSize = 40; $totalPage = ceil($total / $pageSize); $mvSpider->limit($pageSize)->asArray(); for ($page = 1; $page <= $totalPage; $page++) { $offset = ($page - 1) * $pageSize; $data = $mvSpider->offset($offset)->all(); foreach ($data as $v) { if (MvBasic::findOne(['douban_id' => $v['subject_id']])) { echo 'doubanID:', $v['subject_id'], " exists \n"; MvSpider::updateAll(['status' => 1], "subject_id={$v['subject_id']}"); continue; } $rawData = $api->getMovie($v['subject_id']); if (!$rawData) { echo 'doubanApi:', $v['subject_id'], " empty \n"; continue; } $infoData = $this->formatMovie($rawData); if (is_array($infoData)) { // mv_basic $basic_id = 0; $MvBasic = new MvBasic(); foreach ($infoData as $k1 => $v1) { $MvBasic->{$k1} = $v1; } // pinyin if (isset($infoData['title'])) { $py_title = PinyinUtil::getFullPy($infoData['title']); $MvBasic->py_title = PinyinUtil::subPinyin($py_title); } if (isset($infoData['original_title'])) { $py_original_title = PinyinUtil::getFullPy($infoData['original_title']); $MvBasic->py_original_title = PinyinUtil::subPinyin($py_original_title); } $MvBasic->save(); $basic_id = $MvBasic->primaryKey; // movie type $movieType = $rawData['genres']; foreach ($movieType as $t) { // mv_basic_condition type $cond = models\MvBasicCondition::find()->where(['name' => $t, 'cond_type' => 1])->asArray()->one(); if (empty($cond)) { $MvBasicType = new models\MvBasicCondition(); $MvBasicType->cond_type = 1; $MvBasicType->name = $t; $MvBasicType->update_time = time(); $MvBasicType->save(); $cond_id = $MvBasicType->primaryKey; } else { $cond_id = $cond['id']; } // mv_basic_type if (!models\MvBasicType::findOne(['basic_id' => $basic_id, 'cate_id' => $cond_id])) { $MvBasicType = new models\MvBasicType(); $MvBasicType->basic_id = $basic_id; $MvBasicType->cate_id = $cond_id; $MvBasicType->save(); } } // country $movieCountry = $rawData['countries']; foreach ($movieCountry as $t) { // mv_basic_condition country $cond = models\MvBasicCondition::find()->where(['name' => $t, 'cond_type' => 2])->asArray()->one(); if (empty($cond)) { $MvBasicType = new models\MvBasicCondition(); $MvBasicType->cond_type = 2; $MvBasicType->name = $t; $MvBasicType->update_time = time(); $MvBasicType->save(); $cond_id = $MvBasicType->primaryKey; } else { $cond_id = $cond['id']; } // mv_basic_country if (!models\MvBasicCountry::findOne(['basic_id' => $basic_id, 'country_id' => $cond_id])) { $MvBasicCountry = new models\MvBasicCountry(); $MvBasicCountry->basic_id = $basic_id; $MvBasicCountry->country_id = $cond_id; $MvBasicCountry->save(); } } // mod mv_spider.status=1 if ($basic_id) { MvSpider::updateAll(['status' => 1], "subject_id={$v['subject_id']}"); } } sleep(0.5); // movieInfo end } //sleep(1); // page end } }