viernes, 11 de enero de 2019

API para conocer el tipo de dispositivo en JavaScript


<head>
<script type="text/javascript" src="https://wurfl.io/wurfl.js"></script>

<script>
    if (WURFL.form_factor == 'Smartphone') {
        if (WURFL.complete_device_name.indexOf("Apple iPhone") == 0) {
            // iPhone
        } else {
            // Android
        }
    } else {
        // Feature phone
    }
</script>
</head>

API para obtener sistema operativo, navegador y versión del usuario en PHP


Request:
https://uploadbeta.com/api/parse-user-agent/?s=nUser-Agent:[USER AGENT]

Response:
{"platform":"Windows","browser":"Chrome","version":"71.0.3578.98"}



Método para retornar valores en array:

function infoUA($ua) {
    $url = 'https://uploadbeta.com/api/parse-user-agent/?s=nUser-Agent:' . urlencode($ua);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($ch);
    curl_close($ch);

    $array = json_decode($response, 1);
    return array($array['platform'], $array['browser'], $array['version']);
}

API para obtener datos sobre el país según la IP en PHP


Request para recibir response en JSON:
http://api.ipaddress.com/iptocountry?format=json

Response:
{"ipaddress":"100.110.160.99","continent_code":"SA","continent_name":"South America","country_code":"AR","country_name":"Argentina"}


Request para recibir response en XML:
http://api.ipaddress.com/iptocountry?format=xml

Response
<?xml version="1.0"?><location><ipaddress>100.110.160.99</ipaddress><continent_code>SA</continent_code><continent_name>South America</continent_name><country_code>AR</country_code><country_name>Argentina</country_name></location>



Método PHP para obtener código del país y nombre del país:

function infoIP($ip) {
    $url = 'http://api.ipaddress.com/iptocountry?format=json&ip=' . $ip;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec($ch);
    curl_close($ch);

    $array = json_decode($response, 1);
    return array(strtolower($array['country_code']), $array['country_name']);
}

Método para retornar resultados en array MySQL en PHP


function consultar($sql) {
    $link = new mysqli('[IP]', '[USER]', '[PASSWORD]', '[BASE DE DATOS]');

    if ($link->connect_errno) {
        die('Fallo al conectar a MySQL: ' . $link->connect_error);
    }

    $result = $link->query($sql);

    if ($result->num_rows > 0) {
        $rows = array();

        while ($row = $result->fetch_assoc()) {
            $rows[] = $row;
        }

        return $rows;
    } else {
        return FALSE;
    }
}


USO:

$sql = "SELECT id FROM tabla";
$array = consultar($sql);

foreach ($array as $key => $value) {
    echo $value['id'];
}

Comprimir código HTML con PHP


Para comprimir se coloca el siguiente código PHP al inicio del documento:

ob_start('ob_gzhandler');
ob_gzhandler(ob_start('compress_page'), 5);

function compress_page($buffer) {
    $search = array('/\>[^\S ]+/s', '/[^\S ]+\</s', '/(\s)+/s');
    $replace = array('>', '<', '\\1');
    return preg_replace($search, $replace, $buffer);
}

Método para crear urls amigables en PHP


function urls_amigables($url)
{
    // Tranformamos todo a minúsculas
    $url = strtolower($url);

    // Reemplazamos caracteres especiales latinos
    $find = array('á', 'é', 'í', 'ó', 'ú', 'ñ', 'á', 'é', 'í', 'ó', 'ú');
    $repl = array('a', 'e', 'i', 'o', 'u', 'n', 'a', 'e', 'i', 'o', 'u');
    $url = str_replace($find, $repl, $url);

    // Añadimos los guiones
    $find = array(' ', '&', '\r\n', '\n', '+');
    $url = str_replace($find, '-', $url);

    // Eliminamos y reemplazamos los demás caracteres especiales
    $find = array('/[^a-z0-9\-<>]/', '/[\-]+/', '/<[^>]*>/');
    $repl = array('', '-', '');

    return preg_replace($find, $repl, $url);
}

Método para ofuscar texto en PHP


function obfuscate($text) {
    $length = strlen($text);
    $scrambled = '';

    for ($i = 0; $i < $length; ++$i) {
        $scrambled .= '&#' . ord(substr($text, $i, 1)) . ';';
    }

    return $scrambled;
}

Obtener IP real de un usuario aunque este en un Proxy con PHP


Para obtener la IP real se utiliza:

$ip = filter_input(INPUT_SERVER, 'HTTP_X_FORWARDED_FOR') ?? filter_input(INPUT_SERVER, 'REMOTE_ADDR');

Guardar archivo y mini preview de una imagen en PHP


1. Leer variables del formulario:
$vars = get_defined_vars();

2. Obtener todos los campos FILE:
extract($vars['_FILES']);

3. Definir variables con el input a trabajar:
$file_name = $PREVIEW['name'];
$file_tmp_name = $PREVIEW['tmp_name'];
$file_error = $PREVIEW['error'];

4. Cargar archivo al servidor:
$path = '../game/image/' . $ID . 'b.jpg';
move_uploaded_file($file_tmp_name, $path);

5. Guardar mini preview:
list($width, $height) = getimagesize($path);
$new_width = 233;
$new_height = 146;
$prev = imagecreatetruecolor($new_width, $new_height);
$origen = imagecreatefromjpeg($path);
imagecopyresampled($prev, $origen, 0, 0, 0, 0, $new_width, $new_height, $new_width, $new_height);
imagejpeg($prev, '../game/thumbnail/' . $ID . 'm.jpg', 70);

jueves, 10 de enero de 2019

Descargar el CDN en App Engine de Google


Para descargar una copia del CDN de Google se utiliza el comando:

appcfg.py download_app -A [NOMBRE DE LA APP] -V 1 [UNIDAD + PATH DESCARGA]

Ejemplo:
appcfg.py download_app -A appengcdn -V 1 D:\appengcdn

URL thumbnail o miniatura para Youtube


Urls para la imagen del vídeo Youtube estandar y HD.

https://i1.ytimg.com/vi/[CODIGO VIDEO]/hqdefault.jpg
https://i.ytimg.com/vi/[CODIGO VIDEO]/maxresdefault.jpg

Ejemplo:
https://i1.ytimg.com/vi/ROOHPmzrQ9k/hqdefault.jpg
https://i.ytimg.com/vi/ROOHPmzrQ9k/maxresdefault.jpg

Codificación UTF-8 para Netbeans


Netbeans por defecto omite las tildes y caracteres especiales. Para solucionar:

1. Ir a la carpeta de instalación y buscar el directorio etc
C:\Archivos de programa\NetBeans x.x\etc

2. Editar el archivo netbeans.conf agregando  "-J-Dfile.encoding=UTF-8" en la línea de opciones por default del NetBeans (netbeans_default_options). El resto de opciones permanecen igual.

3. Volver a abrir Netbeans.

Buscar contenido en archivos de forma recursiva en Linux


Para buscar cualquier contenido dentro de un archivo y obtener la lista de archivos que coinciden se utiliza:

grep -lir "[TEXTO A BUSCAR]" "PATH"

Ejemplo:
grep -lir "8801202" "/html/apps"

Reemplazar contenido de varios archivos sin conocer el script en Linux


Si no se conoce el script pero se desea reemplazar el contenido de uno o varios archivos se utiliza el comando find de Linux

find PATH -name "*.php" -print | xargs perl -pi -e "s/[TEXTO A BUSCAR][TEXTO A REEMPLAZAR]/g"

PATH es la ruta en el servidor. Si en el texto a buscar y/o texto a reemplazar es una url se deben escapar los caracteres slash. Por ejemplo:

find PATH -name "*.php" -print | xargs perl -pi -e "s/http:\/\/getbootstrap.com\/dist\/css\/bootstrap.min.css/https:\/\/bootswatch.com\/4\/cerulean\/bootstrap.min.css/g"

Cómo actualizar uno o varios caracteres en un campo mysql

Formato
UPDATE tabla SET campo = REPLACE(campo, "a", "e");

Ejemplo
Si tenemos una tabla llamada juegos y en ella un campo llamado pais, cuyo contenido deseamos cambiar en todos los registros, debemos utilizar la siguiente expresión sql:

UPDATE juegos SET pais = REPLACE(pais, "rd", "do");