ChessParser
pgn to json/php array parser
Install / Use
/learn @DHTMLGoodies/ChessParserREADME
PGN to PHP array parser
PHP class for conversion of Chess PGN files to PHP array or JSON.
This is the chess parser used in DHTML Chess at [dhtml-chess.com]
- License: LGPL (Lesser General Public License).
Example of use:
Import games from PGN file:
<?php
$parser = new PgnParser('my-games.pgn');
echo json_encode($parser->getGames());
?>
This will give you data in this format:
[
{
"metadata":{
"blackelo":"2400",
"opening":"Grunfeld",
"time":"10:41:37",
"variation":"Three Knights Variation",
"whiteelo":"2400",
"whitetype":"human",
"blacktype":"human",
"castle":1
},
"event":"Computer chess game",
"site":"BORROW-PC",
"date":"2013.01.19",
"round":"?",
"white":"White player",
"black":"Black player",
"result":"*",
"eco":"D90",
"timecontrol":"300",
"termination":"unterminated",
"plycount":"21",
"fen":"rnbqkbnr\/pppppppp\/8\/8\/8\/8\/PPPPPPPP\/RNBQKBNR w KQkq - 0 1",
"moves":[
{
"m":"e4",
"from":"e2",
"to":"e4",
"fen":"rnbqkbnr\/pppppppp\/8\/8\/4P3\/8\/PPPP1PPP\/RNBQKBNR b KQkq - 0 1"
},
{
"m":"d5",
"variations":[
[
{
"m":"e5",
"comment":"Test comment before",
"from":"e7",
"to":"e5",
"fen":"rnbqkbnr\/pppp1ppp\/8\/4p3\/4P3\/8\/PPPP1PPP\/RNBQKBNR w KQkq - 0 2"
},
{
"m":"Nf3",
"comment":"Test comment after",
"from":"g1",
"to":"f3",
"fen":"rnbqkbnr\/pppp1ppp\/8\/4p3\/4P3\/5N2\/PPPP1PPP\/RNBQKB1R b KQkq - 1 2"
},
{
"m":"Nc6",
"from":"b8",
"to":"c6",
"fen":"r1bqkbnr\/pppp1ppp\/2n5\/4p3\/4P3\/5N2\/PPPP1PPP\/RNBQKB1R w KQkq - 2 3"
},
{
"m":"Bc4",
"from":"f1",
"to":"c4",
"fen":"r1bqkbnr\/pppp1ppp\/2n5\/4p3\/2B1P3\/5N2\/PPPP1PPP\/RNBQK2R b KQkq - 3 3"
},
{
"m":"Nf6",
"variations":[
[
{
"m":"d6",
"from":"d7",
"to":"d6",
"fen":"r1bqkbnr\/ppp2ppp\/2np4\/4p3\/2B1P3\/5N2\/PPPP1PPP\/RNBQK2R w KQkq - 0 4"
},
{
"m":"O-O",
"comment":"(O-O Ng8-f6 Nb1-c3 Nc6-d4 Nf3-g5 d6-d5 e4xd5 h7-h6 Ng5-e4 c7-c6 d5xc6 Nf6xe4 Nc3xe4 b7xc6) +0.48\/11 8",
"from":"e1",
"to":"g1",
"fen":"r1bqkbnr\/ppp2ppp\/2np4\/4p3\/2B1P3\/5N2\/PPPP1PPP\/RNBQ1RK1 b kq - 1 4"
},
{
"m":"Nf6",
"from":"g8",
"to":"f6",
"fen":"r1bqkb1r\/ppp2ppp\/2np1n2\/4p3\/2B1P3\/5N2\/PPPP1PPP\/RNBQ1RK1 w kq - 2 5"
},
{
"m":"Nc3",
"comment":"Last move in variation",
"from":"b1",
"to":"c3",
"fen":"r1bqkb1r\/ppp2ppp\/2np1n2\/4p3\/2B1P3\/2N2N2\/PPPP1PPP\/R1BQ1RK1 b kq - 3 5"
}
]
],
"from":"g8",
"to":"f6",
"fen":"r1bqkb1r\/pppp1ppp\/2n2n2\/4p3\/2B1P3\/5N2\/PPPP1PPP\/RNBQK2R w KQkq - 4 4"
},
{
"m":"O-O",
"comment":"Variation ended",
"from":"e1",
"to":"g1",
"fen":"r1bqkb1r\/pppp1ppp\/2n2n2\/4p3\/2B1P3\/5N2\/PPPP1PPP\/RNBQ1RK1 b kq - 5 4"
},
{
"m":"d6",
"from":"d7",
"to":"d6",
"fen":"r1bqkb1r\/ppp2ppp\/2np1n2\/4p3\/2B1P3\/5N2\/PPPP1PPP\/RNBQ1RK1 w kq - 0 5"
}
]
],
"from":"d7",
"to":"d5",
"fen":"rnbqkbnr\/ppp1pppp\/8\/3p4\/4P3\/8\/PPPP1PPP\/RNBQKBNR w KQkq - 0 2"
},
{
"m":"exd5",
"comment":"Variation ended",
"from":"e4",
"to":"d5",
"fen":"rnbqkbnr\/ppp1pppp\/8\/3P4\/8\/8\/PPPP1PPP\/RNBQKBNR b KQkq - 0 2"
},
{
"m":"Nf6",
"from":"g8",
"to":"f6",
"fen":"rnbqkb1r\/ppp1pppp\/5n2\/3P4\/8\/8\/PPPP1PPP\/RNBQKBNR w KQkq - 1 3"
},
{
"m":"c4",
"variations":[
[
{
"m":"Nf3?!",
"from":"g1",
"to":"f3",
"fen":"rnbqkb1r\/ppp1pppp\/5n2\/3P4\/8\/5N2\/PPPP1PPP\/RNBQKB1R b KQkq - 2 3"
},
{
"m":"Qxd5",
"from":"d8",
"to":"d5",
"fen":"rnb1kb1r\/ppp1pppp\/5n2\/3q4\/8\/5N2\/PPPP1PPP\/RNBQKB1R w KQkq - 0 4"
},
{
"m":"Nc3",
"from":"b1",
"to":"c3",
"fen":"rnb1kb1r\/ppp1pppp\/5n2\/3q4\/8\/2N2N2\/PPPP1PPP\/R1BQKB1R b KQkq - 1 4"
},
{
"m":"Qa5",
"from":"d5",
"to":"a5",
"fen":"rnb1kb1r\/ppp1pppp\/5n2\/q7\/8\/2N2N2\/PPPP1PPP\/R1BQKB1R w KQkq - 2 5"
},
{
"m":"d4",
"from":"d2",
"to":"d4",
"fen":"rnb1kb1r\/ppp1pppp\/5n2\/q7\/3P4\/2N2N2\/PPP2PPP\/R1BQKB1R b KQkq - 0 5"
}
]
],
"from":"c2",
"to":"c4",
"fen":"rnbqkb1r\/ppp1pppp\/5n2\/3P4\/2P5\/8\/PP1P1PPP\/RNBQKBNR b KQkq - 0 3"
},
{
"m":"Bf5",
"comment":"Variation ended",
"variations":[
[
{
"m":"Nbd7",
"from":"b8",
"to":"d7",
"fen":"r1bqkb1r\/pppnpppp\/5n2\/3P4\/2P5\/8\/PP1P1PPP\/RNBQKBNR w KQkq - 1 4"
},
{
"m":"Nf3",
"from":"g1",
"to":"f3",
"fen":"r1bqkb1r\/pppnpppp\/5n2\/3P4\/2P5\/5N2\/PP1P1PPP\/RNBQKB1R b KQkq - 2 4"
},
{
"m":"Nb6",
"from":"d7",
"to":"b6",
"fen":"r1bqkb1r\/ppp1pppp\/1n3n2\/3P4\/2P5\/5N2\/PP1P1PPP\/RNBQKB1R w KQkq - 3 5"
},
{
"m":"d4",
"from":"d2",
"to":"d4",
"fen":"r1bqkb1r\/ppp1pppp\/1n3n2\/3P4\/2PP4\/5N2\/PP3PPP\/RNBQKB1R b KQkq d3 0 5"
},
{
"m":"g6",
"from":"g7",
"to":"g6",
"fen":"r1bqkb1r\/ppp1pp1p\/1n3np1\/3P4\/2PP4\/5N2\/PP3PPP\/RNBQKB1R w KQkq - 0 6"
},
{
"m":"Nc3",
"from":"b1",
"to":"c3",
"fen":"r1bqkb1r\/ppp1pp1p\/1n3np1\/3P4\/2PP4\/2N2N2\/PP3PPP\/R1BQKB1R b KQkq - 1 6"
},
{
"m":"Qd6",
"from":"d8",
"to":"d6",
"fen":"r1b1kb1r\/ppp1pp1p\/1n1q1np1\/3P4\/2PP4\/2N2N2\/PP3PPP\/R1BQKB1R w KQkq - 2 7"
}
]
],
"from":"c8",
"to":"f5",
"fen":"rn1qkb1r\/ppp1pppp\/5n2\/3P1b2\/2P5\/8\/PP1P1PPP\/RNBQKBNR w KQk
Related Skills
node-connect
353.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
353.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
353.3kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
