[ //橙子老师/ 幸福女子学堂
"huDongBaUserId" => 'un3es',
"ufutx_merchant_id" => 729,
"anchors_id" => 820,
],
"18820255084" => [ //DTA创玩家/张天乐
"huDongBaUserId" => '63bn',
"ufutx_merchant_id" => 154,
"anchors_id" => 258,
],
"18312402612" => [ //大龄之恋:邝雄伟
"huDongBaUserId" => '0r8bcu',
"ufutx_merchant_id" => 812,
"anchors_id" => 901,
],
"15016731593" =>[
"huDongBaUserId" => 'z8jm',
"ufutx_merchant_id" => 26,
"anchors_id" => 120,
],
"15002015539" =>[ //周媒人
"huDongBaUserId" => 'i8z5x',
"ufutx_merchant_id" => 767,
"anchors_id" => 856,
],
];
public static $huoDongXingUserList = [ //深圳取乐活动圈/龚道
"15871878634" => [
"huoDongXingUserId" => '9062700541096',
"ufutx_merchant_id" => 698,
"anchors_id" => 789,
],
"18520883213" => [ //三经书院
"huoDongXingUserId" => '3532527772821',
"ufutx_merchant_id" => 516,
"anchors_id" => 617,
]
];
public function getHuDongBaScrapy($mobile)
{
$val = self::$huDongBaUserList[$mobile];
if (!$val) {
return [];
}
$id = $val['huDongBaUserId'];
$url_parse = ["scheme" => "https", "host" => "www.hudongba.com", "path" => "u/" . $id . ".html", "query" => 'pageNum'];
$url_base = $url_parse['scheme'] . '://' . $url_parse['host'];
$pageNum = 1;
for ($i = 0; $i < 5; $i++) {
sleep(rand(3, 6));
$url = $url_parse['scheme'] . '://' . $url_parse['host'] . '/' . $url_parse['path'] . "?" . $url_parse['query'] . "=" . $pageNum;
$results = $this->getHuDongBaActiveDetails($url, $url_base, $val);
if (isset($results) && is_array($results)) {
foreach ($results as $result) {
$this->saveDataBase($result, $val);
}
}
$pageNum += 1;
}
return [];
}
private function getHuDongBaActiveDetails($url, $url_base, $val)
{
$html = new HtmlDocument();
$html->loadFile($url);
$rets = $html->find('div.timeline-main div.info-party-list');
if (!$rets) {
return null;
}
$active_list = [];
foreach ($rets as $ret) {
if ($ret->attr['class'] == "info-party-list" && isset($ret->children)) {
foreach ($ret->children as $children1) {
if ($children1->tag == 'a' && $children1->attr['class'] == "party-list-link") {
if ($children1->children[0]->tag == 'div' && $children1->children[0]->attr['class'] == 'info-img') {
if ($children1->children[0]->children[0]->tag == 'img' && isset($children1->children[0]->children[0]->attr['src'])) {
$active['img'] = $children1->children[0]->children[0]->attr['src'];
}elseif ($children1->children[0]->children[1]->tag == 'img' && isset($children1->children[0]->children[1]->attr['src'])) {
$active['img'] = $children1->children[0]->children[1]->attr['src'];
}
}
} elseif ($children1->tag == 'div' && $children1->attr['class'] == "info-mation") {
foreach ($children1->children as $children2) {
if ($children2->tag == 'a' && $children2->attr['class'] == 'party-list-link' && isset($children2->attr['href'])) {
$active['details_url'] = $children2->attr['href'];
if ($children2->children[0]->tag == 'div' && $children2->children[0]->attr['class'] == 'info-title') {
$active['title'] = $children2->children[0]->plaintext;
}
if (isset($active['details_url'])) {
//活动详情
$detail_url = parse_url($active['details_url']);
if ($detail_url && !empty($detail_url['path'])) {
$temp1 = explode("/", $detail_url['path']);
$active_id = str_replace(".html", "", $temp1[2]);
$active['details_url'] = $url_base . "/party" . "/" . $active_id . ".html";
}
sleep(rand(3, 9));
$result = Http::get($active['details_url']);
//删除
之前的内容
$str = "";
if ($x = strpos($result, '')) {
$str = substr($result, $x);
}
//删除 之后的内容
if ($x = strpos($str, '
')) {
$str = substr($str, 0, $x);
}
$active['details'] = $str;
if (mb_strpos($active['title'], "线上") || (isset($active['address']) && mb_strpos($active['address'], "线上活动"))) { //线上=0,线下=1
$active['location'] = 0;
} else {
$active['location'] = 1;
}
//时间地点
$details_html = new HtmlDocument();
$details_html->load($result);
$details_rets = $details_html->find('div.detail_time_attr_join div.detail_time_attr_join_gray');
if ($details_rets) {
foreach ($details_rets as $details_ret) {
if (isset($details_ret->children)) {
foreach ($details_ret->children as $details_children) {
if (isset($details_children->attr['class']) && $details_children->attr['class'] == 'detail_Attr') {
foreach ($details_children->children as $details_children1) {
if ($details_children1->tag == 'a') {
$active['address'] = $details_children1->plaintext;
}
}
} else {
continue;
}
}
}
}
}
//获取时间
$detail_url = parse_url($active['details_url']);
if ($detail_url && !empty($detail_url['path'])) {
$temp1 = explode("/", $detail_url['path']);
$active_id = str_replace(".html", "", $temp1[2]);
$date_url = "https://api.hudongba.com/ajax/api:110?infoId36=" . $active_id . "&type=1&_time=" . time();
sleep(rand(3, 6));
$res = Http::get($date_url);
if ($res) {
$res = json_decode($res, true);
$active['start_time'] = $res['result']['frequencyList'][0]['startDate'];
$active['end_time'] = $res['result']['frequencyList'][0]['endTime'];
}
}
}
} elseif ($children2->tag == 'div' && $children2->attr['class'] == 'info-price') {
if ($children2->children[0]->tag == 'span' && $children2->children[0]->attr['class'] == 'n-price') {
$price = $children2->children[0]->plaintext;
if ($price == '免费') {
$active['price'] = 0.00;
} else {
$price = str_replace("¥", "", $price);
$price = str_replace("起", "", $price);
$active['price'] = (int)$price;
}
}
}
}
}
}
$active_list[] = $active;
unset($active);
}
}
return $active_list;
}
public function saveDataBase($active, $merchantInfo)
{
//开始写表
$ret = CommunityActivity::where("title", $active['title'])->where('anchor_id', $merchantInfo['anchors_id'])
->where("merchant_id", $merchantInfo['ufutx_merchant_id'])->first();
if (!$ret && isset($active['details']) && !empty($active['details'])) {
$communityActivity = new CommunityActivity();
if (!empty($merchantInfo['anchors_id'])) {
$communityActivity->anchor_id = $merchantInfo['anchors_id'];
}
$communityActivity->merchant_id = $merchantInfo['ufutx_merchant_id'];
$communityActivity->title = $active['title'];
$communityActivity->pv = 1;
if (isset($active['price'])) {
$communityActivity->price = $active['price'];
}
if (isset($active['pay_type'])) {
$communityActivity->pay_type = $active['pay_type'];
}
if (isset($active['location'])) {
$communityActivity->location = $active['location'];
}
$communityActivity->sort = 1;
$communityActivity->start_time = $active['start_time'];
$communityActivity->end_time = $active['end_time'];
$communityActivity->apply_deadline = $active['start_time'];
$communityActivity->status = 0;
$communityActivity->type = "business";
$communityActivity->pic = $active['img'];
$communityActivity->describe = $active['details'];
$communityActivity->is_top = 0;
$communityActivity->class = "one";
$communityActivity->is_top = 0;
$communityActivity->is_love_show = 0;
$communityActivity->reward_status = 0;
if (isset($active['address'])) {
$communityActivity->address = $active['address'];
}
$communityActivity->insurance = 0;
$communityActivity->save();
$id = $communityActivity->id;
//banner
$banner = LiveBanner::where('class', 'community')->where('class_id', $id)->first();
if (!$banner) {
$live_banner = new LiveBanner();
$live_banner->icon = json_encode([$active['img']]);
$live_banner->status = 1;
$live_banner->class = "community";
$live_banner->class_id = $id;
$live_banner->save();
}
}
}
public function getHuoDongXingScrapy($mobile)
{
$val = self::$huoDongXingUserList[$mobile];
if (!$val) {
return [];
}
$id = $val['huoDongXingUserId'];
$url_base = ["scheme" => "https", "host" => "gz.huodongxing.com", "path" => "/people/" . $id, "query" => "type=pub"];
$temp = explode('/', $url_base['path']);
$url = $url_base['scheme'] . '://' . $url_base['host'] . '/' . $temp[1] . '/' . $id . "?" . $url_base['query'];
$url_details = $url_base['scheme'] . '://' . $url_base['host'];
$results = $this->getHuoDongXingActiveDetails($url, $url_details, $val);
if (isset($results) && is_array($results)) {
foreach ($results as $result) {
$this->saveDataBase($result, $val);
}
}
return [];
}
private function getHuoDongXingActiveDetails($url, $url_base, $merchantInfo)
{
$html = new HtmlDocument();
$html->loadFile($url);
$rets = $html->find('div#user-favorite-event li ul li');
if (!$rets) {
return null;
}
$active_list = [];
foreach ($rets as $ret) {
foreach ($ret->children as $children_1) {
if ($children_1->tag == 'div') {
continue;
} elseif ($children_1->tag == 'a') {
$active['Url'] = $children_1->attr['href'];
if (isset($children_1->children)) {
foreach ($children_1->children as $children_2) {
if ($children_2->tag == 'img') {
$active['img'] = $children_2->attr['src'];
}
if ($children_2->tag == 'div' && $children_2->class == 'media-body') {
foreach ($children_2->children as $children_3) {
if ($children_3->tag == "h3") {
$active['title'] = $children_3->plaintext;
}
if ($children_3->tag == "div" && $children_3->children[0]->attr['class'] == 'icon-place') {
$active['address'] = $children_3->plaintext;
}
if ($children_3->tag == "img" && $children_3->children[0]->attr['class'] == 'face') {
$active['logo'] = $children_3->children[0]->attr['src'];
}
}
}
}
}
}
}
$active_list[] = $active;
}
$active_list = $this->arrayUniqueness($active_list, "title");
foreach ($active_list as $key => $active) {
if (isset($active['Url'])) {
$details_url = $url_base . $active['Url'];
sleep(rand(6, 9));
$result = Http::get($details_url);
//删除
之前的内容
$str = "";
if ($x = strpos($result, '
')) {
$str = substr($result, $x);
}
//删除 之后的内容
if ($x = strpos($str, '
')) {
$str = substr($str, 0, $x);
}
$active_list[$key]['details'] = $str;
//金额
if ($x = strpos($result, '[{"SN":')) {
$str = substr($result, $x);
}
if ($x = strpos($str, 'var eventModelId')) {
$str = substr($str, 0, $x);
$str = str_replace(";\r\n\t", "", $str);
$str = json_decode($str, true);
if ($str) {
$active_list[$key]['price'] = $str[0]['Price'];
if ($active_list[$key]['price'] > 0) {
//收费和免费
$active_list[$key]['pay_type'] = 'wechat';
} else {
$active_list[$key]['pay_type'] = 'free';
}
}
}
//时间
if ($x = strpos($result, '
')) {
$str = substr($result, $x);
}
if ($x = strpos($str, '
')) {
$str = substr($str, 0, $x);
}
$html = new HtmlDocument();
$html->load($str);
$rets = $html->find('div.address-info-wrap div');
$time = $rets[0]->plaintext;
if ($time) {
list($start_time, $end_time) = explode(" ~ ", $time);
if ($start_time && $end_time) {
$start_time = date_parse_from_format('Y.m.d H:i:s', $start_time);
$active_list[$key]['start_time'] = $start_time['year'] . '-' . $start_time['month'] . "-" . $start_time['day'] . " " . $start_time['hour'] . ":" . $start_time['minute'] . ":" . $start_time['second'];
$end_time = date_parse_from_format('Y.m.d H:i:s', $end_time);
$active_list[$key]['end_time'] = $end_time['year'] . '-' . $end_time['month'] . "-" . $end_time['day'] . " " . $end_time['hour'] . ":" . $end_time['minute'] . ":" . $end_time['second'];
}
}
//活动地点&&线上线下活动
if ($x = strpos($result, '
')) {
$str = substr($result, $x);
}
if ($x = strpos($str, '
')) {
$str = substr($str, 0, $x);
}
$html = new HtmlDocument();
$html->load($str);
$rets = $html->find('span.link-a-hover');
if ($rets) {
$active_list[$key]['address'] = $rets[0]->plaintext;
if ($active_list[$key]['address'] == '线上活动') {
$active_list[$key]['location'] = 0;
} else {
$active_list[$key]['location'] = 1;
}
} else {
$active_list[$key]['location'] = 1;
}
}
}
return $active_list;
}
private function arrayUniqueness($arr, $key)
{
$res = array();
foreach ($arr as $value) {
//查看有没有重复项
if (isset($res[$value[$key]])) {
//有:销毁
unset($value[$key]);
} else {
$res[$value[$key]] = $value;
}
}
return array_reverse($res);
}
}