예제 #1
0
 /**
  * 作业主入口
  */
 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)
 }