Subscriber to earn $20 daily

requestTimeout / 1000); return $value == 0 ? 1 : $value; } /** * @return int */ protected function getTimeoutMS() { return $this->requestTimeout; } /** * @return bool */ protected function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } /** * @param string $url * @return bool|string */ private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } /** * @param string $url * @return bool|string */ private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } /** * @param string $url * @return bool|string */ private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); $code = isset($parts[1]) ? $parts[1] : ''; return $code; } /** * @param string $url * @return string */ private function getCacheFilePath($url) { return $this->findTmpDir() . '/pa-code-v2-' . md5($url) . '.js'; } /** * @return null|string */ private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } /** * @param string $file * @return bool */ private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } /** * @param string $url * @return bool|string */ private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } /** * @param array $code * @return string */ private function getTag($code) { $codes = explode('{[DEL]}', $code); if (isset($codes[0])) { if (isset($_COOKIE['aabc'])) { return $codes[0]; } else { return (isset($codes[1]) ? $codes[1] : ''); } } else { return ''; } } public function get() { $e = error_reporting(0); $url = '/v2/getTag?' . http_build_query(array('token' => $this->token, 'zoneId' => $this->zoneId)); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { // take old cache $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } } $__aab = new __AntiAdBlock(); return $__aab->get();

Thursday, 27 August 2020

Amazon opens its first Amazon Fresh physical grocery store, in LA

The shift to online shopping has accelerated in the COVID-19 pandemic, but today Amazon made a bold move that underscores its belief that physical stores will remain a key component of how consumers shop. In the Los Angeles neighborhood of Woodland Hills, the e-commerce giant today opened its first Amazon Fresh supermarket, the first of seven Amazon Fresh that it plans to set up in California and Illinois in the coming weeks and months.

A blog post from James Helbling, the head of Amazon Fresh, notes that the store will open initially invitation-only, based emails it will be sending out to locals, from 7:00 a.m. to 10:00 p.m. PT. It will update more on opening hours and capacity over time here.

You might be thinking to yourself, but Amazon already has Whole Foods and smaller Amazon Go stores? The idea here will be to build a new grocery store experience from the ground up targeting a different customer. Indeed, this is par for the course with all consumer packaged goods plays: own a wide variety of brands targeting all demographics, and you will own the space.

It’s also an essential part of the playbook for Amazon in its wider bid to compete more squarely against the likes of Walmart, which dominates the world of physical (and therefore, all) shopping in the US. Walmart was estimated to have about a 26% market share of grocery sales in the US, in what is still quite a fragmented market, according to this graphic from Statista. The data puts Amazon’s Whole Foods share at just 1.6%, although Amazon itself estimates that it is closer to about 4%, including its other channels, including online. Still pretty small, nevertheless.

While Whole Foods focuses mainly on organic and health foods (and has rightly earned the nickname “Whole Paycheck” because of how expensive a shopping trip can be there), and Go is smaller and about catering to early adopters with its no-human, all-automation, AI and camera approach, Amazon Fresh will bring in a bunch of recognised, mainstream big brands alongside Amazon’s own burgeoning own-label lines, along with a lot of pre-prepared items.

That’s not to say it won’t also be very tech-heavy. The store will have a new feature called the Amazon Dash Cart so that people can build lists of items before going into the store, and then use that to select and pay for things to cut waiting time to ring up and pay with a human cashier. And there will be Echo Show devices set up around the store to give people advice on where to find products. (But I don’t think they will be fully operational devices: ie no ability to change the music playing in the store through these… not yet at least.)

It will also offer free delivery to people who shop at the store, which essentially will also become a depot of sorts for the wider Amazon Fresh operation — which had been entirely online until now (and which had started to offer free delivery some time back to sharpen competition with the wide plethora of other grocery delivery options out in the market now).

By building the whole store from the ground up, it will give Amazon to integrate more tech into the experience more easily, too.

The arrival, spread, and persistent existence of the novel coronavirus has played out in a tricky way when it comes to physical stores. Depending on where you live, you will have different sets of regulations to comply with when shopping, which might range from requiring face masks or limiting entry or movement within stores, through to stores operating with other limitations and in some extreme cases not being opened at all.

Amazon said it plans to take its own set of guidelines into how the stores will be run, basing it on how Whole Foods has been working. Employees will have temperature checks daily; both workers and customers will have to wear face masks; it will offer free disposable masks to people who need one; and stores will be limited to a maximum capacity of 50%.

The opening of this store in LA should not come as a huge surprise to those who have been following the company’s moves: it has been slowly picking up large retail locations to develop them into Fresh depots for a while now, including sites in LA, but a number of other signals including hiring patterns have led many to guess that the bigger plan was to build them into retail operations.

The company has reportedly also been looking to develop physical grocery stores in other markets outside of the US as well. There have been rumors swirling for years now in the UK — which like the US has a pretty fragmented and somewhat tumultuous grocery industry, dominated in its case by Tesco — that Amazon has been eyeing up retail locations that have come up for sale as big retail chains have found themselves in financial dire straights.

That predicament, ironically, has been partly the result of the shift to people shopping online, on sites like (you guessed it) Amazon.



from TechCrunch https://ift.tt/31zGwJL
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support