示例#1
0
 /**
  * 抓去豆瓣数据 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
     }
 }