🌐

Scripts y ejemplos de código (PHP y Python)

Código documentado y listo para usar. Cada ejemplo incluye explicación, para quién es y qué problema resuelve.

💡 Cómo usar estos ejemplos: Necesitas un servidor web (si lo pruebas en local, necesitas un servidor local, Xampp o Docker), el servidor debe tener la versión de PHP 7.4 (o superior). Lee el bloque de explicación antes de copiar el código. Adapta las variables (credenciales, nombres de tablas, rutas) a tu proyecto.
💡 Cómo usar estos ejemplos: Asegúrate de tener todos los complementos de Python. Consola para ejecutar comandos Python. Todas las librerías mencionadas en la cabecera del fichero.
⚽

Scrappeo de Web (transfermarkt.es)

Para quién

Cualquier desarrollador del mundo del fútbol.

Qué problema resuelve

Obtención en formato estructurado de la lista de jugadores de un equipo de fútbol.


# Listado de Librerias, asegurate de instalar todos estos paquetes
import datetime
from datetime import datetime
from bs4 import BeautifulSoup
import requests
import time
import datetime
import json
# Obtener la fecha de hoy
today = datetime.datetime.today()
# Extraer día y mes de la fecha de hoy
day_today = today.day
month_today = today.month
# Extraer el año de la fecha de hoy
current_year = datetime.datetime.now().year
# El año desde donde vamos a iniciar a obtener
# Colocamos el año hasta el que queremos obtener
current_year = datetime.datetime.now().year
current_year = 2020
# Generamos la lista de los años de los que queremos obtener
years_list = list(range(current_year, 1999, -1))
teams = {
  '131': 'fc-barcelona'
}
all_players={}
# Defininimos la URL a obtener datos sustituyendo  el ID de equipo y el nombre en la URL 
# Lo sacaremos de la URL
# TEAM_ID
# TEAM_NAME
# BASE_URL='https://www.transfermarkt.es/fc-barcelona/kader/verein/131/saison_id/2025/plus/1
# BASE_URL='http://www.transfermarkt.es/'+TEAM_NAME+'/kader/verein/'+TEAM_ID+'/plus/1/galerie/0?saison_id='

for team in teams:
  team_name=teams[team]
  all_players[team_name] = []
  BASE_URL='https://www.transfermarkt.es/'+teams[team]+'/kader/verein/'+team+'/saison_id/'
  # Vamos sacando la Plantilla año tras año
  urls = [f"{BASE_URL}{year}/plus/1" for year in years_list]
  # Configuramos las cabeceras del navegador
  headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36",
  }

  all_data_team = []
  for url in urls:
    data = []
    # Para evitar banneos entre temporada y temporada esperamos 20 segundos
    time.sleep(20)
    TRANSFERMARKT_URL = url
    print(TRANSFERMARKT_URL)
    raw_html=None
    html=None
    quotes_body=None
    quotes_tr=None
    rows=None
    response = None
    response = requests.get(TRANSFERMARKT_URL, headers=headers)
    requests.session().close()
    # Analizar sintácticamente el texto fuente HTML guardado en raw_html
    status_code=response.status_code
    if status_code == 200:
      raw_html=response.text
      html = BeautifulSoup(response.text, 'html.parser')
      quotes_html = html.find_all('table', class_="item")
      if not (bool(quotes_html)):
        continue
      quotes_body = html.find_all('tbody')[1]
      quotes_tr = quotes_body.find_all('tr', class_=lambda x: x in ['even', 'odd'])
      count_players=0
      for row in quotes_tr:
        player_data = row.find_all('img', class_=lambda x: x in ['bilderrahmen-fixed lazy lazy'])
        player_data_1 = row.find_all('td', class_=lambda x: x in ['zentriert'])
        birthday_str=player_data_1[1].text[:10]
        
        name = player_data[0].get('title')
        img = player_data[0].get('data-src')        

        all_data_team.append([name,img,birthday_str])
        count_players+=1

# Ya tenemos as plantillas de todas las temporadas y ya tenemos todos los jugadores en un array
  print(all_data_team)
        
¿Tienes dudas? Escríbeme
🔌

Consumir una API REST

Para quién

Desarrolladores que necesitan conectarse a servicios externos y mostrar datos.

Qué problema resuelve

Petición HTTP con cURL, manejo de errores, decodificación JSON.

<?php
// Ejemplo: consumir API pública de envío y recepción de mensajes por telegram

    $url="https://api.paginaweb.es"
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 15,
        CURLOPT_CUSTOMREQUEST  => $method,
        CURLOPT_HTTPHEADER     => array_merge([
            "Accept: application/json",
            "Content-Type: application/json",
        ], $headers),
        CURLOPT_SSL_VERIFYPEER => true,
    ]);

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $error    = curl_error($ch);
    curl_close($ch);

    if ($error) {
        throw new RuntimeException("cURL error: $error");
    }
    if ($httpCode !== 200) {
        throw new RuntimeException("HTTP $httpCode al llamar $url");
    }

    $data = json_decode($response, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        throw new RuntimeException("JSON inválido: " . json_last_error_msg());
    }

     print_r($data);
¿Tienes dudas? Escríbeme

¿Necesitas un script específico?

Si tienes un problema concreto de automatización o integración con PHP, cuéntamelo. Puede que ya lo haya resuelto antes o que lo podamos hacer juntos.

Cuéntame tu caso