client = new Client(['timeout' => 10.0, 'allow_redirects' => true]); } /** * Execute the console command. * * @return mixed */ public function handle() { $this->updateAll(); } /** * 更新所有书的章节 */ public function updateAll() { set_time_limit(0); $exist_book = Book::where('ly_bid', '!=', '0')->where('status', 0)->select('id', 'ly_bid')->get(); foreach ($exist_book as $v) { //Log::info('updateAll bid is: '.$v->id.'$ly_bid is :'.$v->ly_bid.'----------------------------'); $this->updateOne($v->id, $v->ly_bid); } } /** * 更新章节内容 一本书的 * @param $bid * @return int|string */ public function updateOne($bid, $ly_bid) { set_time_limit(0); //$max_sequence = Chapter::where('bid', $bid)->max('sequence'); //$max_sequence = $max_sequence ? $max_sequence : -1; //$max_sequence_chapter = Chapter::where('bid', $bid)->where('sequence', $max_sequence)->select('id')->first(); //$max_sequence_chapter_id = isset($max_sequence_chapter->id) ? $max_sequence_chapter->id : 0; $this->bookStatus($bid, $ly_bid); $last_chapter = Chapter::where('bid', $bid) ->select('id', 'name', 'sequence', 'prev_cid', 'next_cid') ->orderBy('sequence', 'desc') ->first(); $last_chapter_from_third = Chapter::where('bid', $bid) ->where('ly_chapter_id', '>', 0) ->select('id', 'name', 'sequence', 'prev_cid', 'next_cid', 'ly_chapter_id') ->orderBy('sequence', 'desc') ->first(); $max_sequence_chapter_id = isset($last_chapter->id) ? $last_chapter->id : 0; $max_sequence = isset($last_chapter->sequence) ? $last_chapter->sequence : 0; $from_sequence = $max_sequence; try { $chapter_list_fromat = "http://www.leyuee.com/services/zwfx.aspx?method=chapterlist&bid=%s&token=sefaf23h7face"; $res = $this->client->get(sprintf($chapter_list_fromat, $ly_bid)); $res = $res->getBody()->getContents(); } catch (\Exception $e) { Log::info($e); return ''; } if (!$res) return ''; $res = json_decode($res, true); if ($res && isset($res['code']) && $res['code'] == 200) { } else { return ''; } $j = 0; if (isset($res['data']) && $res['data'] && is_array($res['data'])) { } else { return ''; } $local_count = Chapter::where('bid', $bid)->where('ly_chapter_id', '>', 0)->count(); $remote_count = 0; foreach ($res['data'] as $item1) { $remote_count += count($item1['chapters']); $item1 = null; } Log::info('$remote_count is: ' . $remote_count . '====$local_count :' . $local_count . '----'); if ($remote_count == $local_count) return ''; Log::info('$bid =: ' . $bid . '---is lack---'); $start = false; if (!$last_chapter) { $start = true; } $ly_last_chapter_id = 0; if ($last_chapter_from_third && isset($last_chapter_from_third->ly_chapter_id)) { $ly_last_chapter_id = $last_chapter_from_third->ly_chapter_id; } foreach ($res['data'] as $v1) { foreach ($v1['chapters'] as $v) { /*if ($v['chapter_order_number'] <= $max_sequence-1) { continue; } if (Chapter::where('bid', $bid)->where('ly_chapter_id', $v['chapter_id'])->count()) { continue; }*/ if (!$start) { if ($v['chapter_id'] != $ly_last_chapter_id) { continue; } else { \Log::info($v1); $start = true; continue; } } Log::info('bid: ' . $bid . '----ly_chapter_id: ' . $v['chapter_id']); $chapter_fromat = "http://www.leyuee.com/services/zwfx.aspx?method=chapter&bid=%s&cid=%s&token=sefaf23h7face"; $cahpter_content_res = $this->client->get(sprintf($chapter_fromat, $ly_bid, $v['chapter_id'])); $cahpter_content = $cahpter_content_res->getBody()->getContents(); $temp = [ 'bid' => $bid, 'name' => $v['chapter_name'], 'sequence' => ++$max_sequence, 'is_vip' => $v['chapter_need_pay'], 'prev_cid' => $max_sequence_chapter_id, 'next_cid' => '', 'recent_update_at' => date('Y-m-d H:i:s', $v['chapter_last_update_time']), 'ly_chapter_id' => $v['chapter_id'] ]; if ($cahpter_content) { $cahpter_content = json_decode($cahpter_content, true); $temp['size'] = ceil(strlen($cahpter_content['data']['chapter_content']) / 3); $temp['content'] = $cahpter_content['data']['chapter_content']; } $insert_res = Chapter::create($temp); Chapter::where('id', $max_sequence_chapter_id)->update(['next_cid' => $insert_res->id]); $max_sequence_chapter_id = $insert_res->id; $temp = null; $j++; } } $chapter_count = Chapter::where('bid', $bid)->count(); $chapter_size = Chapter::where('bid', $bid)->sum('size'); if ($j > 0) { Book::where('id', $bid)->update(['chapter_count' => $chapter_count, 'last_cid' => $max_sequence_chapter_id, 'size' => $chapter_size, 'last_chapter' => $v['chapter_name']]); //ChapterService::splitContentAll($bid,$from_sequence); } return $j; } private function bookStatus($bid, $ly_bid) { $status = 0; try { $book_info_url_format = "http://www.leyuee.com/services/zwfx.aspx?method=bookinfo&token=sefaf23h7face&bid=%s"; $res = $this->client->get(sprintf($book_info_url_format, $ly_bid)); $res = $res->getBody()->getContents(); if ($res) { $res = json_decode($res, true); if (isset($res['data']) && isset($res['data']['book_state'])) { $status = $res['data']['book_state']; } } } catch (\Exception $e) { } if ($status) { Book::where('id', $bid)->update(['status' => $status]); } } }