jueves, 5 de agosto de 2021

Scraper Tiktok - paginado con _signature


El manejo de huellas url es algo esencial para realizar peticiones requests.get a una pagina publica de tiktok para lo cual se usara la librería pyppeteer de python 3 para generar dicha huella mediante una instancia de browser, lo primero que se hará es definir un user_agent este debe ser el mismo con el que se realiza las peticiones al tiktok mediante requests.get(), también sera necesario crear un archivo tiktok.html este se encargara de ejecutar el acrawler.js que se puede encontrar en los recursos de tiktok: https://www.tiktok.com/acrawler/acrawler.js


Estructura de archivos

/website
/website/tiktok.html
/TiktokBrowser.py
/utils.py


tiktok.html

Se importara el el codigo acrawler.js

<script src=" https://www.tiktok.com/acrawler/acrawler.js"></script>

utils.py

Aqui tendremos el web list  de tiktok es decir las peticiones que se puede hacer para un paginado.
def python_list2_web_list(data):
web_list = "[\""
web_list += '", "'.join(data)
web_list += "\"]"
return web_list

TiktokBrowser.py

Se esta clase realizar el instancia miento del Browser
__author__ = "hcushi asecas"
copyright__ = "Copyright 2021"
import os
import asyncio
import shutil
from pyppeteer import launch
from .utils import python_list2_web_list


class TikTokBrowser:

def __init__(self, user_agent):
self.userAgent = user_agent
self.args = [
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-infobars",
"--window-position=0,0",
"--ignore-certifcate-errors",
"--ignore-certifcate-errors-spki-list",
"--user-agent=" + self.userAgent,
'--headless',
"--disable-gpu",
"--single-process",
"--no-zygote",
"--disable-dev-shm-usage"
]
self.options = {
'args': self.args,
'headless': False,
'autoClose': False,
'ignoreHTTPSErrors': True,
'userDataDir': "./tmp",
'handleSIGINT': False,
'handleSIGTERM': False,
'handleSIGHUP': False
}

self.api_list = [
"/api/user/detail",
"/api/user/list/",
"/api/music/detail",
"/api/item/detail",
"/api/challenge/detail/",
"/share/item/list",
"/api/item_list/",
"/api/comment/list/",
"/api/comment/list/reply/",
"/api/discover/*",
"/api/commit/follow/user/",
"/api/recommend/user/",
"/api/impression/write/",
"/share/item/explore/list",
"/api/commit/item/digg/",
"/node/share/*",
"/discover/render/*"
]

parent_folder = os.path.dirname(__file__)
self.tiktok_dummy_page = "file://" + os.path.join(
                            parent_folder, "website", "tiktok.html")

def clean_tmp(self):
tmp = "./tmp"
shutil.rmtree(tmp)

def fetch_auth_params(self, url, language='en'):
try:
return asyncio.get_event_loop().run_until_complete(
                    self.async_fetch_auth_params(url, language))
except RuntimeError as ex:
if "There is no current event loop in thread" in str(ex):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
return asyncio.get_event_loop().run_until_complete(
self.async_fetch_auth_params(url, language))

async def async_fetch_auth_params(self, url, language):
browser = await launch(self.options)
page = await browser.newPage()
await page.setCacheEnabled(False)
await page.evaluateOnNewDocument("""() => {
delete navigator.__proto__.webdriver;
}""")

await page.setUserAgent(self.userAgent)
await page.setExtraHTTPHeaders({
'Accept-Language': language
})

await page.goto(self.tiktok_dummy_page, {'waitUntil': "load"})

signature = await page.evaluate('''() => {
var init_token = window.byted_acrawler.init({
aid: 1988,
dfp: !1,
boe: !1,
intercept: !0,
enablePathList: ''' +
                                 python_list2_web_list(self.api_list)
                                    + '''
});
var token = window.byted_acrawler.sign({url: "''' +
                                                       url + '''"});
return token;
}''')
# await page.close()
await browser.close()
return signature

Como usar la clase 

Para usar  lo que se debe hacer es  crear un main.py  o a su gusto.
 ahí se importara la clase TiktokBrowser definir el user-agent crear la url de tiktok para el 
paginado para cada caso es una url diferente y parámetros distintos , por lo cual en el 
siguiente código notar que la url no esta completa le hace falta los parámetros  de paginado, para saber dichos parámetros investigar el header de tiktok  en cualquier navegador mendiante el inspector de codigo  se podra aceder a network y buscar  la peticion encargada de la paginacion.


import requests
from TikTokBrowser import TikTokBrowser
USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 
            (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
tiktok_browser = TikTokBrowser(USER_AGENT)
#A esta url se le debe agregar los parametros necesarios
# para la peticion del paginado 
url_tiktok = "https://www.tiktok.com/api/challenge/item_list/"   
_signature = tiktok_browser.fetch_auth_params(url_tiktok)
url_tiktok = url_tiktok + "&" +_signature
content = requests.get(url_tiktok, header = {"user-agent": USER_AGENT})

jueves, 16 de julio de 2015

Contacto

Este blog  fue creada con el fin de informar  diversos temas relacionados con la tecnología, se pretende la participación  de los exploradores para la aclaración de un tema planteado y de esta forma  informarse de mejor manera.

foxyform

PPSSPP para android desempeño






Una forma que ahora se vio es los emuladores para PSP en los Smarphon que para ciertos juegos resulta muy efectivo, en mi criterio me  e ahorrado un poco de dinero al no cómprame una PSP, puedes ser que los juegos que requieren un gran desempeño de la consola portátil, en el emulador no es lo mismo, ya que el juego reacciona como se espera si se habla de porcentaje de la velocidad del juego de gran tamaño es de menos del 50% por lo que para eso no se puede decir que beneficia mucho al los adictos al juego , en eso empieza la desesperación. Pero en si le doy un visto bueno para disfrutar de juegos populares de la PSP aquí un link con los juegos que son compatibles con el emulador: http://bitmovil.com/juegos-de-psp-para-android/22383
Descarga desde Google Play: https://play.google.com/store/apps/details?id=org.ppsspp.ppsspp&hl=es_419

sábado, 4 de julio de 2015

Realización de un cola usando Nodos en Java



Primero hay que tener claro que son nodos , es un método recursivo para crear una colección de elementos del tipo que se desee como son int, String. los mas conocidos y trabajados en el rato de aprender programación java.

Creación de un Nodo tipo int:


//metodo recursivo 
static class Nodo {
int dato; 
Nodo sig; 
}


Si creamos un nodo estaremos hablado de un par de elementos donde int dato; es en donde se almacena en numero en este caso, Nodo sig; es donde se almacena la dirección de un nuevo nodo de la misma forma con dos parte su respectivo int y Nodo.


antes de utilizar este método se tiene que tener claro que al ser un método recursivo utiliza un parte de la memoria en donde almacena los datos es decir si se ingresa muchos datos como por ejemplo 1000000 datos int, se podría hablar de una sobrecarga de datos. Una ves aclarado esto acá esta un ejemplo de como crear un cola de 5 elementos pares;


public static void main(String[] args) {


int n = 5; int m = 2; //creacion de la cola usando nodos 
Nodo top = null;//declaramos el nodo principal 
Nodo ultimo = null;
 for (int i = 1; i <= n; i++) { 
Nodo temp = new Nodo();// creando un nodo temp para guardar el dato y después agregarlo a top temp.dato = i * m; 
temp.sig = null;
 if (top == null) {
 top = temp; 
} else { 
ultimo.sig = temp; }
 ultimo = temp; }
 System.out.println("Cola creada:");

//Imprimiendo la cola creada
int cont = 1;

while (top != null) { 
System.out.println(cont + ")" + top.dato);
 top = top.sig;
 cont++; }

}


Después de este ejemplo en java basta decir que en la parte de imprimir la cola se esta haciendo un recorrido a toda la cola por tanto si se intenta hacer una modificación se dará un error por eso lo mas recomendable es realizar un método aparte que imprima la cola.


public void imprimir(Nodo impr2) { 
int cont = 1; 
while (impr2 != null) {
 System.out.println(cont + ")" + impr2.dato);
 impr2 = impr2.sig; 
cont++; } 
}


La llamada a este método es sencilla con dos lineas de código en el método main:


NombreDeLaClase impri=new NombreDeLaClase();
System.out.println("Cola creada:");
impri.imprimir(top);//llamada al método de impresión

Con estas lineas de código se puede asegurar que se tendrá el cursor de la cola siempre en el inicio de la cola con eso se podrá realizar diversas acciones como eliminar ,modificar y aumentar elementos a la cola.

viernes, 3 de julio de 2015

Gamer


Patapon 1 PSP


Se diría que es un clásico entre los juegos de PSP , a mi parecer es un juego muy completo mas que todo de estrategia, saber como sincronizar las acciones que vas a realizar, también e visto el enfoque en un oído musical ya que si lo has jugado me darás la razón es muy divertido el planear que vas a hacer con con tambores, a lo que conocí este juego yo mas lo veía como una serie   de secuencias que bastaba con aprender telas y ya esta mas no es así hay que planear, seguir el ritmo del juego mas que todo, por que si no se sigue ese ritmo es fácil caer en frustración con que no puedes pasar un nivel, por poner un ejemplo de la caminada de los patapons. Es cuadrado, cuadrado, cuadrado, circulo,  para  sincronizar lo básico es repetir pata-pata-pata-pon después de eso hay empezar la nueva canción. Si lo logras llegas a un punto donde los patapons se vuelven invencible como dice el juego a esto se lo llama modo FEVER!!.

Ya si se tiene una practica ya en el modo FEVER!!  se hace maravillas si no se equivoca en las notas, en este punto tus patapons son mas rápido (pata-pata-pata-pon), su defensa aumenta(chaka-ckaca-pata-pon),de la misma forma sus ataques(pon-pon-pata-pon) y mas. Todo depende de que notas éste tocando.
Pongamos esas notas de acuerdo al control:
Triangulo=chaka
Cuadrado=pata
Circulo= pon
X=don

sábado, 14 de enero de 2012

ELECTRONICA

  • La electrónica es una rama de la física  y especialización de la ingeniería que estudia  y emplea sistemas cuyo funcionamiento  se basa en el flujo microscópico de los electrones u otras partículas  cargadas eléctrica mente. 
    Es esta rama de la física se utiliza una variedad de conocimientos, materiales y dispositivos, desde semiconductores  hasta las valvular termiónicas, se puede decir que se ingresa  a una forma de resolver problemas eléctricos de acuerdo circuitos  lógicos, estos circuitos facilitan el uso de menos cableado y  la activación  de algo después de que suceda un evento  esto evita la manipulación humana.   
    La electrónica desarrolla en la actualidad una gran variedad de tareas. Los principales usos de los circuitos electrónicos son el control, el procesado, la distribución de información, la conversión y la distribución de la energía eléctrica. Estos dos usos implican la creación o la detección de campos electromagnéticos y corrientes eléctricas. Entonces se puede decir que la electrónica abarca en general las siguientes áreas de aplicación:
     Estos dos usos implican la creación o la detección de campo electromagnéticas y corrientes electricas. Entonces se puede decir que la electrónica abarca en general las siguientes áreas de aplicación: 
  • Electrónica de control 
  • Telecomunicaciones
  • Electrónica de potencia
    Circuitos de alimentación eléctrica
    La mayoría de los equipos electrónicos requieren tensiones de CC para su funcionamiento, pueden ser suministradas por baterías o por fuentes de alimentación internas que convierten la corriente alterna, que puede obtenerse de la Red eléctrica que llega a cada vivienda, en tensiones reguladas de CC.Este voltaje es muy util para que pueda funcionar de manera adecuada el ordenador u otros equipos. La funcion secundaria del transformador es servir como aislamiento de masa eléctrica del dispositivo a fin de reducir posibles peligros de electrocución.La importancia del condensador en estos circuitos de alimentación entre  más grande sea el condensador, menor será el nivel de fluctuación de la tensión. Es posible alcanzar un control más exacto sobre los niveles y fluctuaciones de tensión mediante un regulador de tensión, que también consigue que las tensiones internas sean independientes de las fluctuaciones que puedan encontrarse en un artefacto eléctrico. Un sencillo regulador de tensión que se utiliza a menudo es el diodo de Zener, formado por un diodo de unión pn de estado sólido que actúa como aislante hasta una tensión predeterminada. Por encima de dicha tensión, se convierte en un conductor que deriva los excesos de tensión. Por lo general, los reguladores de tensión más sofisticados se construyen como circuitos integrados
    Circuitos amplificadores
    Los amplificadores electrónicos se utilizan sobre todo para aumentar la tensión, la corriente o la potencia de una señal. Los amplificadores lineales incrementan la señal sin distorsionarla (o distorsionándola mínimamente), de manera que la salida es proporcional a la entrada. Los amplificadores no lineales permiten generar un cambio considerable en la forma de onda de la señal. Los amplificadores lineales se utilizan para señales de sonido y vídeo, mientras que los no lineales se emplean en osciladores, dispositivos electrónicos de alimentación, moduladores, mezcladores, circuitos lógicos y demás aplicaciones en las que se requiere una reducción de la amplitud. Aunque los tubos de vacío tuvieron gran importancia en los amplificadores, hoy día suelen utilizarse circuitos de transistores discretos o circuitos integrados.