Вход Регистрация
Файл: gapps/vendor/campo/random-user-agent/src/UserAgent.php
Строк: 192
<?php

/**
 * Random User Agent Class
 *
 * This class is used to return a randomly-selected user agent string, which may be based on
 * a given set of criteria. See README.md for more details on how to use this class
 *
 * @author Nick Andren
 * @author Joe Campo
 */

namespace Campo;

class 
UserAgent
{
    
/**
     * Grab a random user agent from the library's agent list
     *
     * @param  array $filterBy
     * @return string
     * @throws Exception
     */
    
public static function random($filterBy = [])
    {
        
$agents self::loadUserAgents($filterBy);

        if (empty(
$agents)) {
            throw new 
Exception('No user agents matched the filter');
        }

        return 
$agents[mt_rand(0count($agents) - 1)];
    }

    
/**
     * Get all of the unique values of the device_type field, which can be used for filtering
     * Device types give a general description of the type of hardware that the agent is running,
     * such as "Desktop", "Tablet", or "Mobile"
     *
     * @return array
     */
    
public static function getDeviceTypes()
    {
        return 
self::getField('device_type');
    }

    
/**
     * Get all of the unique values of the agent_type field, which can be used for filtering
     * Agent types give a general description of the type of software that the agent is running,
     * such as "Crawler" or "Browser"
     *
     * @return array
     */
    
public static function getAgentTypes()
    {
        return 
self::getField('agent_type');
    }

    
/**
     * Get all of the unique values of the agent_name field, which can be used for filtering
     * Agent names are general identifiers for a given user agent. For example, "Chrome" or "Firefox"
     *
     * @return array
     */
    
public static function getAgentNames()
    {
        return 
self::getField('agent_name');
    }

    
/**
     * Get all of the unique values of the os_type field, which can be used for filtering
     * OS Types are general names given for an operating system, such as "Windows" or "Linux"
     *
     * @return array
     */
    
public static function getOSTypes()
    {
        return 
self::getField('os_type');
    }

    
/**
     * Get all of the unique values of the os_name field, which can be used for filtering
     * OS Names are more specific names given to an operating system, such as "Windows Phone OS"
     *
     * @return array
     */
    
public static function getOSNames()
    {
        return 
self::getField('os_name');
    }

    
/**
     * This is a helper for the publicly-exposed methods named get...()
     * @param  string $fieldName
     * @return array
     * @throws Exception
     */
    
private static function getField($fieldName)
    {
        
$agentDetails json_decode(file_get_contents(__DIR__ '/agents/agent_list.json'), true);
        
$values       = [];

        foreach (
$agentDetails as $agent) {
            if (!isset(
$agent[$fieldName])) {
                throw new 
Exception("Field name "$fieldName" not found, can't continue");
            }

            
$values[] = $agent[$fieldName];
        }

        return 
array_values(array_unique($values));
    }

    
/**
     * Validates the filter so that no unexpected values make their way through
     *
     * @param array $filterBy
     * @return array
     */
    
private static function validateFilter($filterBy = [])
    {
        
// Components of $filterBy that will not be ignored
        
$filterParams = [
            
'agent_name',
            
'agent_type',
            
'device_type',
            
'os_name',
            
'os_type',
        ];

        
$outputFilter = [];

        foreach (
$filterParams as $field) {
            if (!empty(
$filterBy[$field])) {
                
$outputFilter[$field] = $filterBy[$field];
            }
        }

        return 
$outputFilter;
    }

    
/**
     * Returns an array of user agents that match a filter if one is provided
     *
     * @param array $filterBy
     * @return array
     */
    
private static function loadUserAgents($filterBy = [])
    {
        
$filterBy self::validateFilter($filterBy);

        
$agentDetails json_decode(file_get_contents(__DIR__ '/agents/agent_list.json'), true);
        
$agentStrings = [];

        for (
$i 0$i count($agentDetails); $i++) {
            foreach (
$filterBy as $key => $value) {
                if (!isset(
$agentDetails[$i][$key]) || !self::inFilter($agentDetails[$i][$key], $value)) {
                    continue 
2;
                }
            }
            
$agentStrings[] = $agentDetails[$i]['agent_string'];
        }

        return 
array_values($agentStrings);
    }

    
/**
     * return if key exist in array of filters
     *
     * @param  $key
     * @param  $array
     * @return bool
     */
    
private static function inFilter($key$array)
    {
        return 
in_array(strtolower($key), array_map('strtolower', (array) $array));
    }
}
Онлайн: 1
Реклама