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: Asegurate de tener todos los complementos de Python. Consola para ejecutar comandos Python. Todas las librerias 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