/** * 作业主入口 */ public function main($argc, $argv) { $wx = new Weixin(); $total = $wx->getMaterialCount(); //按素材类型逐个获取列表 foreach (self::$type_set as $type) { $type_total = $total[$type . '_count']; $offset = 0; $count = $type_total > self::MAX_COUNT ? self::MAX_COUNT : $type_total; $this->log("Type={$type}..."); do { $ret = $wx->getMaterialList($type, $offset, $count); if (empty($ret) || $ret['item_count'] == 0) { break; } $curr_latest_uptime = $ret['item'][0]['update_time']; if ($curr_latest_uptime == $this->check_latest_uptime($type)) { break; //如果当前返回的最新时间戳跟本地的最大时间戳一样,则不需要处理了(仅在第一次检查) } // 循环获取各个素材 foreach ($ret['item'] as $it) { $data_base = ['type' => $type, 'media_id' => $it['media_id'], 'show_cover_pic' => 0, 'update_time' => $it['update_time'], 'is_multiple' => 0, 'add_time' => simphp_time()]; if ($type == 'news') { //图文消息相比其他消息复杂特殊 if (!empty($it['content']) && !empty($it['content']['news_item'])) { $multi_count = count($it['content']['news_item']); if ($multi_count > 1) { //多图文信息 $data_base['is_multiple'] = 1; } foreach ($it['content']['news_item'] as $cont) { $sign = $this->media_sign($type, $it['media_id'], $cont['url']); if (!$this->can_insert($sign) && !$this->need_update($sign, $it['update_time'])) { break 3; // 记录存在且时间未更新,则不需要处理了,直接跳出主循环(在这里是3层) } $data = []; $data['media_sign'] = $sign; $data['title'] = $cont['title']; $data['author'] = $cont['author']; $data['digest'] = $cont['digest']; $data['content'] = $cont['content']; $data['content_source_url'] = $cont['content_source_url']; $data['url'] = $cont['url']; $data['thumb_media_id'] = $cont['thumb_media_id']; $data['show_cover_pic'] = $cont['show_cover_pic']; $data = array_merge($data_base, $data); $nid = $this->save_material($data); // 下载图片并保存 if ($nid) { $outfile = ''; if ($wx->getMaterial($cont['thumb_media_id'], $outfile)) { if ($outfile) { $this->save_thumb_media_url($nid, $outfile); } } } } } } else { $sign = $this->media_sign($type, $it['media_id'], $it['url']); if (!$this->can_insert($sign) && !$this->need_update($sign, $it['update_time'])) { break 2; // 记录存在且时间未更新,则不需要处理了,直接跳出主循环(在这里是2层) } $data = []; $data['media_sign'] = $sign; $data['name'] = $it['name']; $data['url'] = $it['url']; $data = array_merge($data_base, $data); $this->save_material($data); } } //END foreach ($ret['item'] AS $it) $offset += $ret['item_count']; //改写偏移 } while ($offset < $type_total); } //END foreach (self::$type_set AS $type) }