Diferencia entre revisiones de «ED Plantillas»
De FSF
Sin resumen de edición |
|||
| Línea 15: | Línea 15: | ||
$edApi = "http://localhost/00_ED/api.php"; | $edApi = "http://localhost/00_ED/api.php"; | ||
$user = " | $user = "Ed1@Zero"; | ||
$pass = " | $pass = "pa0n691978pqpmd3dcapqsmuj9044v8o"; | ||
$cookie = __DIR__ . "/cookie.txt"; | |||
// ========================= | // ========================= | ||
// REQUEST | // REQUEST | ||
// ========================= | // ========================= | ||
| Línea 41: | Línea 43: | ||
// ========================= | // ========================= | ||
// LOGIN | // LOGIN CORRECTO | ||
// ========================= | // ========================= | ||
function login($api, $user, $pass, $cookie) { | function login($api, $user, $pass, $cookie) { | ||
$ | echo "Obteniendo login token...\n"; | ||
$tokenRes = request($api, [ | |||
"action" => "query", | "action" => "query", | ||
"meta" => "tokens", | "meta" => "tokens", | ||
| Línea 53: | Línea 57: | ||
], $cookie); | ], $cookie); | ||
$loginToken = $ | $loginToken = $tokenRes["query"]["tokens"]["logintoken"] ?? null; | ||
if (!$loginToken) { | |||
die("ERROR TOKEN\n"); | |||
} | |||
request($api, [ | echo "Logeando...\n"; | ||
$res = request($api, [ | |||
"action" => "login", | "action" => "login", | ||
"lgname" => $user, | "lgname" => $user, | ||
| Línea 62: | Línea 72: | ||
"format" => "json" | "format" => "json" | ||
], $cookie); | ], $cookie); | ||
if (!isset($res["login"]["result"]) || $res["login"]["result"] !== "Success") { | |||
die("ERROR LOGIN: " . json_encode($res) . "\n"); | |||
} | |||
echo "Login OK\n"; | |||
} | } | ||
// ========================= | // ========================= | ||
// | // CSRF | ||
// ========================= | // ========================= | ||
| Línea 75: | Línea 91: | ||
], $cookie); | ], $cookie); | ||
return $res["query"]["tokens"]["csrftoken"]; | return $res["query"]["tokens"]["csrftoken"] ?? null; | ||
} | } | ||
// ========================= | // ========================= | ||
// | // PLANTILLAS | ||
// ========================= | // ========================= | ||
| Línea 97: | Línea 113: | ||
if ($cont) $params["apcontinue"] = $cont; | if ($cont) $params["apcontinue"] = $cont; | ||
$ | $raw = file_get_contents($api . "?" . http_build_query($params)); | ||
$res = json_decode($ | $res = json_decode($raw, true); | ||
if (!isset($res["query"]["allpages"])) continue; | |||
foreach ($res["query"]["allpages"] as $p) { | foreach ($res["query"]["allpages"] as $p) { | ||
| Línea 112: | Línea 130: | ||
// ========================= | // ========================= | ||
// CONTENIDO | // CONTENIDO | ||
// ========================= | // ========================= | ||
function getContent($api, $title) { | function getContent($api, $title) { | ||
$ | |||
$raw = file_get_contents($api . "?" . http_build_query([ | |||
"action" => "query", | "action" => "query", | ||
"prop" => "revisions", | "prop" => "revisions", | ||
| Línea 124: | Línea 143: | ||
])); | ])); | ||
$res = json_decode($ | $res = json_decode($raw, true); | ||
if (!isset($res["query"]["pages"])) return null; | |||
foreach ($res["query"]["pages"] as $p) { | foreach ($res["query"]["pages"] as $p) { | ||
| Línea 136: | Línea 157: | ||
// ========================= | // ========================= | ||
// GUARDAR | // GUARDAR | ||
// ========================= | // ========================= | ||
function save($api, $title, $content, $token, $cookie) { | function save($api, $title, $content, $token, $cookie) { | ||
request($api, [ | $res = request($api, [ | ||
"action" => "edit", | "action" => "edit", | ||
"title" => $title, | "title" => $title, | ||
| Línea 148: | Línea 169: | ||
"format" => "json" | "format" => "json" | ||
], $cookie); | ], $cookie); | ||
if (isset($res["error"])) { | |||
echo "ERROR SAVE\n"; | |||
return false; | |||
} | |||
return true; | |||
} | } | ||
| Línea 154: | Línea 182: | ||
// ========================= | // ========================= | ||
login($edApi, $user, $pass, $cookie); | login($edApi, $user, $pass, $cookie); | ||
$csrf = getCsrf($edApi, $cookie); | $csrf = getCsrf($edApi, $cookie); | ||
echo " | if (!$csrf) die("ERROR CSRF\n"); | ||
echo "CSRF OK\n"; | |||
$templates = getTemplates($fsfApi); | $templates = getTemplates($fsfApi); | ||
| Línea 170: | Línea 198: | ||
echo "Sync $tpl ... "; | echo "Sync $tpl ... "; | ||
$ | $fsf = getContent($fsfApi, $tpl); | ||
$ | $ed = getContent($edApi, $tpl); | ||
if ( | if ($fsf === null) { | ||
echo "ERROR | echo "ERROR API\n"; | ||
continue; | continue; | ||
} | } | ||
if ($ | if ($fsf !== $ed) { | ||
save($edApi, $tpl, $ | save($edApi, $tpl, $fsf, $csrf, $cookie); | ||
echo " | echo "GUARDADO\n"; | ||
} else { | } else { | ||
echo "SIN CAMBIOS\n"; | echo "SIN CAMBIOS\n"; | ||
| Línea 186: | Línea 214: | ||
} | } | ||
echo "\n✔ | echo "\n✔ FIN\n"; | ||
</pre> | </pre> | ||
</small></small> | </small></small> | ||
Revisión actual - 16:23 21 mar 2026
Instala y sincroniza plantiallas
Ejecuta así
- cd /d C:\xampp\htdocs\scripts && C:\xampp\php\php.exe sync_templates.php
<?php
if (php_sapi_name() !== 'cli') {
die("Solo CLI\n");
}
$fsfApi = "http://localhost/00_FSF/api.php";
$edApi = "http://localhost/00_ED/api.php";
$user = "Ed1@Zero";
$pass = "pa0n691978pqpmd3dcapqsmuj9044v8o";
$cookie = __DIR__ . "/cookie.txt";
// =========================
// REQUEST
// =========================
function request($url, $params, $cookie = null) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
if ($cookie) {
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
}
$res = curl_exec($ch);
curl_close($ch);
return json_decode($res, true);
}
// =========================
// LOGIN CORRECTO
// =========================
function login($api, $user, $pass, $cookie) {
echo "Obteniendo login token...\n";
$tokenRes = request($api, [
"action" => "query",
"meta" => "tokens",
"type" => "login",
"format" => "json"
], $cookie);
$loginToken = $tokenRes["query"]["tokens"]["logintoken"] ?? null;
if (!$loginToken) {
die("ERROR TOKEN\n");
}
echo "Logeando...\n";
$res = request($api, [
"action" => "login",
"lgname" => $user,
"lgpassword" => $pass,
"lgtoken" => $loginToken,
"format" => "json"
], $cookie);
if (!isset($res["login"]["result"]) || $res["login"]["result"] !== "Success") {
die("ERROR LOGIN: " . json_encode($res) . "\n");
}
echo "Login OK\n";
}
// =========================
// CSRF
// =========================
function getCsrf($api, $cookie) {
$res = request($api, [
"action" => "query",
"meta" => "tokens",
"format" => "json"
], $cookie);
return $res["query"]["tokens"]["csrftoken"] ?? null;
}
// =========================
// PLANTILLAS
// =========================
function getTemplates($api) {
$list = [];
$cont = null;
do {
$params = [
"action" => "query",
"list" => "allpages",
"apnamespace" => 10,
"aplimit" => "max",
"format" => "json"
];
if ($cont) $params["apcontinue"] = $cont;
$raw = file_get_contents($api . "?" . http_build_query($params));
$res = json_decode($raw, true);
if (!isset($res["query"]["allpages"])) continue;
foreach ($res["query"]["allpages"] as $p) {
$list[] = $p["title"];
}
$cont = $res["continue"]["apcontinue"] ?? null;
} while ($cont);
return $list;
}
// =========================
// CONTENIDO
// =========================
function getContent($api, $title) {
$raw = file_get_contents($api . "?" . http_build_query([
"action" => "query",
"prop" => "revisions",
"rvprop" => "content",
"format" => "json",
"titles" => $title
]));
$res = json_decode($raw, true);
if (!isset($res["query"]["pages"])) return null;
foreach ($res["query"]["pages"] as $p) {
if (isset($p["revisions"][0]["*"])) {
return $p["revisions"][0]["*"];
}
}
return null;
}
// =========================
// GUARDAR
// =========================
function save($api, $title, $content, $token, $cookie) {
$res = request($api, [
"action" => "edit",
"title" => $title,
"text" => $content,
"token" => $token,
"format" => "json"
], $cookie);
if (isset($res["error"])) {
echo "ERROR SAVE\n";
return false;
}
return true;
}
// =========================
// EJECUCIÓN
// =========================
login($edApi, $user, $pass, $cookie);
$csrf = getCsrf($edApi, $cookie);
if (!$csrf) die("ERROR CSRF\n");
echo "CSRF OK\n";
$templates = getTemplates($fsfApi);
echo "Total: " . count($templates) . "\n\n";
foreach ($templates as $tpl) {
echo "Sync $tpl ... ";
$fsf = getContent($fsfApi, $tpl);
$ed = getContent($edApi, $tpl);
if ($fsf === null) {
echo "ERROR API\n";
continue;
}
if ($fsf !== $ed) {
save($edApi, $tpl, $fsf, $csrf, $cookie);
echo "GUARDADO\n";
} else {
echo "SIN CAMBIOS\n";
}
}
echo "\n✔ FIN\n";