Example #1
0
        if (!empty($rate) && $rate < 76 && $item->{"Availability"} != "Sold Out" && !empty($info->{'LegoID'})) {
            $ret = publish_SaleMessage("toysrus.com", $ToysrusID, $price, $info->{'LegoID'});
            if (!$ret->{'Status'}) {
                echo "[Info][" . date('Y-m-d H:i:s') . "] " . $info->{'LegoID'} . " on sale for \$" . $price . " (" . $rate . "% off from reg. \$" . $info->{'MSRP'} . ") www.toysrus.com/product/index.jsp?productId=" . $ToysrusID . "\n";
            } else {
                echo "[Warning][" . date('Y-m-d H:i:s') . "] Failed to publish tweet due to " . $ret->{'Message'} . ": " . $info->{'LegoID'} . " on sale for \$" . $price . " (" . $rate . "% off from reg. \$" . $info->{'MSRP'} . ")\n";
            }
        }
    } elseif (!empty($item->{'LegoID'})) {
        $legoID = $item->{'LegoID'};
        db_insert("Toysrus_Item", array("LegoID" => $legoID, "ToysrusID" => $ToysrusID), null, true);
        echo "[Info][" . date('Y-m-d H:i:s') . "] New item added by legoid: " . $legoID . " - " . $item->{'Title'} . " www.toysrus.com/product/index.jsp?productId=" . $ToysrusID . "\n";
        send_Message(NOTIFICATION_RECIPIENT, "New Toysrus_Item " . $legoID . " - " . $item->{'Title'} . " listed on www.toysrus.com/product/index.jsp?productId=" . $ToysrusID);
    } else {
        // try to match the legoid by title.
        $ret = search_legoid(array("Title" => $item->{'Title'}));
        if (isset($ret->{'MatchID'})) {
            $legoID = $ret->{'MatchID'};
            db_insert("Toysrus_Item", array("LegoID" => $legoID, "ToysrusID" => $ToysrusID), null, true);
        } else {
            $legoID = null;
            db_insert("Toysrus_Item", array("LegoID" => "", "ToysrusID" => $ToysrusID), null, true);
        }
        echo "[Info][" . date('Y-m-d H:i:s') . "] New item added by title: " . $legoID . " - " . $item->{'Title'} . " www.toysrus.com/product/index.jsp?productId=" . $ToysrusID . "\n";
        send_Message(NOTIFICATION_RECIPIENT, "New Toysrus_Item " . $legoID . " - " . $item->{'Title'} . " listed on www.toysrus.com/product/index.jsp?productId=" . $ToysrusID);
    }
}
if (!empty($arrNoupdate)) {
    $ret = db_update("Toysrus_Item", array("LastUpdateTime" => gmdate('Y-m-d H:i:s')), "ToysrusID IN (" . implode(",", $arrNoupdate) . ")");
    echo "[Info][" . date('Y-m-d H:i:s') . "] No update for " . count($arrNoupdate) . " items\n";
}
Example #2
0
function price_scan($provider)
{
    $tlbName = $provider . "_Item";
    if ($provider == "Amazon") {
        $idName = "ASIN";
    } else {
        $idName = $provider . "ID";
    }
    $ret = db_query($tlbName . " LEFT JOIN DB_Set ON " . $tlbName . ".LegoID = DB_Set.LegoID LEFT JOIN DB_Theme ON DB_Set.ThemeID = DB_Theme.ThemeID", array($idName, $tlbName . ".LegoID AS LegoID", "ETitle AS Title", "ETheme AS Theme", $tlbName . ".Availability AS Availability", "Price", "USPrice AS MSRP"), null);
    if (!$ret->{'Status'}) {
        foreach ($ret->{'Results'} as $item) {
            $idx = $item->{$idName};
            $dbItems["{$idx}"] = $item;
        }
    }
    echo "[Info][" . date('Y-m-d H:i:s') . "] " . count($dbItems) . " items loaded from DB Table {$tlbName}\n";
    $ret = crawl_price($provider);
    if ($ret->{'ItemCount'}) {
        $crawlItems = $ret->{'Items'};
    }
    echo "[Info][" . date('Y-m-d H:i:s') . "] " . count($crawlItems) . " items crawled from page " . $ret->{'URL'} . "\n";
    $arrNoupdate = array();
    foreach ($crawlItems as $crawlitem) {
        $itemID = $crawlitem->{$idName};
        if (isset($dbItems["{$itemID}"])) {
            $dbitem = $dbItems["{$itemID}"];
            $msrp = $dbitem->{'MSRP'};
            $price = $crawlitem->{'Price'};
            if ($msrp && $price) {
                $rate = 100 - round($price / $msrp * 100);
            } else {
                $rate = null;
            }
            $arrfields = array();
            $arrProp = array("Price", "Availability");
            foreach ($arrProp as $prop) {
                if (!empty($crawlitem->{"{$prop}"}) && $crawlitem->{"{$prop}"} != $dbitem->{"{$prop}"}) {
                    $arrfields[$prop] = $crawlitem->{$prop};
                }
            }
            if ($arrfields['Availability'] == "Unknown") {
                unset($arrfields['Availability']);
            }
            if (!empty($arrfields)) {
                $arrfields['LastUpdateTime'] = gmdate('Y-m-d H:i:s');
                $ret = db_update($tlbName, $arrfields, array($idName => $itemID));
                if (!$ret->{'Status'}) {
                    unset($arrfields['LastUpdateTime']);
                    $strupdate = "";
                    foreach ($arrfields as $prop => $value) {
                        $strupdate .= $prop . "[" . $dbitem->{$prop} . "=>" . $value . "], ";
                    }
                    $strupdate = trim($strupdate, ", ");
                    echo "[Info][" . date('Y-m-d H:i:s') . "] " . $tlbName . " " . $dbitem->{'LegoID'} . " - " . $dbitem->{'Title'} . " updated: " . $strupdate . " " . get_url_by_itemID($provider, $itemID) . "\n";
                    //send_Message(NOTIFICATION_RECIPIENT, "Toysrus_Item ".$dbitem->{'LegoID'}." - ".$dbitem->{'Title'}." updated: ".$strupdate." www.toysrus.com/product/index.jsp?productId=$ToysrusID");
                }
                if (!empty($rate) && $rate > 25 && ($crawlitem->{"Availability"} == "Available" || $crawlitem->{"Availability"} == "Shipping Only") && !empty($dbitem->{'LegoID'})) {
                    $ret = db_query("Twitter_Pool", array("TweetID", "Price"), "Provider='" . $provider . "' AND ItemID='" . $itemID . "' AND AddTime > '" . gmdate('Y-m-d H:i:s', strtotime('-7 days')) . "' ORDER BY AddTime DESC");
                    if (!$ret->{'Status'} && $ret->{'Results'}) {
                        $tweetID = $ret->{'Results'}[0]->{"TweetID"};
                        $lastPrice = $ret->{'Results'}[0]->{"Price"};
                        $lastRate = 100 - round($lastPrice / $msrp * 100);
                        if ($rate - $lastRate > 2) {
                            $message = "[" . $dbitem->{'LegoID'} . "] " . $dbitem->{'Theme'} . " - " . ${$dbitem}->{'Title'} . " was reduced even further to \$" . $price . " (" . $rate . "% off from reg.\$" . $msrp . ") ";
                            //retweet.
                            add_deal_tweet_pool($provider, $message, $itemID, $dbitem->{'LegoID'}, $price);
                            //send_Message(NOTIFICATION_RECIPIENT, $message);
                        } else {
                            $message = "[" . $dbitem->{'LegoID'} . "] is on sale for \$" . $price . " (" . $rate . "% off from reg.\$" . $msrp . ") has been posted by " . $tweetID;
                        }
                    } else {
                        $message = "[" . $dbitem->{'LegoID'} . "] " . $dbitem->{'Theme'} . " - " . $dbitem->{'Title'} . " is on sale for \$" . $price . " (" . $rate . "% off from reg.\$" . $msrp . ") ";
                        //new tweet.
                        add_deal_tweet_pool($provider, $message, $itemID, $dbitem->{'LegoID'}, $price);
                    }
                    //echo "[Info][".date('Y-m-d H:i:s')."] ".$message."\n";
                }
            } else {
                array_push($arrNoupdate, $itemID);
            }
        } elseif (!empty($crawlitem->{'LegoID'})) {
            $legoID = $crawlitem->{'LegoID'};
            db_insert($tlbName, array("LegoID" => $legoID, $idName => $itemID), null, true);
            echo "[Info][" . date('Y-m-d H:i:s') . "] New item added by legoid: " . $legoID . " - " . $crawlitem->{'Title'} . " " . get_url_by_itemID($provider, $itemID) . "\n";
            //send_Message(NOTIFICATION_RECIPIENT, "New Toysrus_Item ".$legoID." - ".$crawlitem->{'Title'}." listed on www.toysrus.com/product/index.jsp?productId=".$ToysrusID);
        } else {
            // try to match the legoid by title.
            $ret = search_legoid(array("Title" => $crawlitem->{'Title'}));
            if (isset($ret->{'MatchID'})) {
                $legoID = $ret->{'MatchID'};
                db_insert($tlbName, array("LegoID" => $legoID, $idName => $itemID), null, true);
            } else {
                $legoID = null;
                db_insert($tlbName, array("LegoID" => "", $idName => $itemID), null, true);
            }
            echo "[Info][" . date('Y-m-d H:i:s') . "] New item added by title: " . $legoID . " - " . $crawlitem->{'Title'} . " " . get_url_by_itemID($provider, $itemID) . "\n";
            //send_Message(NOTIFICATION_RECIPIENT, "New ".$tlbName." ".$legoID." - ".$crawlitem->{'Title'}." listed on ".get_url_by_itemID($provider, $itemID);
        }
    }
    if (!empty($arrNoupdate)) {
        $ret = db_update($tlbName, array("LastUpdateTime" => gmdate('Y-m-d H:i:s')), $idName . " IN (" . implode(",", $arrNoupdate) . ")");
        echo "[Info][" . date('Y-m-d H:i:s') . "] No update for " . count($arrNoupdate) . " items\n";
    }
}
Example #3
0
function crawl_target()
{
    $page = 1;
    $perpage = 120;
    // max per page = 40
    $ret = new stdClass();
    $ret->{'Provider'} = "www.target.com";
    $ret->{'URL'} = "http://redsky.target.com/v1/plp/search?category=5xtb0&sort_by=Featured&faceted_value=56h5n";
    $ret->{'ItemCount'} = 0;
    $ret->{'Items'} = array();
    for ($i = 0; $i < $page; $i++) {
        $url = $ret->{'URL'} . "&count=" . $perpage . "&offset=" . $i * $perpage;
        $response = json_decode(curl($url));
        $total = intval($response->search_response->metaData[1]->value);
        $page = ceil($total / $perpage);
        $items = $response->search_response->items->Item;
        foreach ($items as $item) {
            $retItem = new stdClass();
            $retItem->{'Price'} = str_replace("\$", "", $item->offer_price->price);
            $retItem->{'Title'} = $item->title;
            $retItem->{'TargetID'} = $item->tcin;
            $availability = $item->availability_status;
            if ($availability == "IN_STOCK") {
                $retItem->{'Availability'} = "Available";
            } elseif ($availability == "OUT_OF_STOCK") {
                $retItem->{'Availability'} = "Out of Stock";
            } else {
                $retItem->{'Availability'} = "Unknown";
            }
            preg_match_all("/\\d{4,8}/u", $retItem->{'Title'}, $matches);
            if (isset($matches)) {
                $legoID = intval(array_pop(array_pop($matches)));
                if ($legoID > intval(gmdate('Y'))) {
                    $retItem->{'LegoID'} = $legoID;
                }
            } else {
                $retSearch = search_legoid(array("Barcode" => $item->upc));
                if (isset($retSearch->{'MatchID'})) {
                    $retItem->{'LegoID'} = $retSearch->{'MatchID'};
                } else {
                    $retItem->{'LegoID'} = null;
                }
            }
            if (!in_array($retItem, $ret->{'Items'}) && !empty($retItem->{'TargetID'})) {
                $ret->{'ItemCount'}++;
                array_push($ret->{'Items'}, $retItem);
            }
        }
    }
    return $ret;
}