<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>json相关文章列表 | 皇家元林</title>
	<atom:link href="https://hjyl.org/tags/json/feed/" rel="self" type="application/rss+xml" />
	<link>https://hjyl.org</link>
	<description>刘元林的个人博客</description>
	<lastBuildDate>Mon, 23 Dec 2024 16:08:34 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://img.hjyl.org/uploads/2019/10/cropped-about-me-32x32.png</url>
	<title>json相关文章列表 | 皇家元林</title>
	<link>https://hjyl.org</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>docker还能这么用</title>
		<link>https://hjyl.org/docker-php-music-json/</link>
					<comments>https://hjyl.org/docker-php-music-json/#comments</comments>
		
		<dc:creator><![CDATA[皇家元林]]></dc:creator>
		<pubDate>Mon, 23 Dec 2024 16:08:31 +0000</pubDate>
				<category><![CDATA[元林手札]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker镜像]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[音乐]]></category>
		<guid isPermaLink="false">https://hjyl.org/?p=5628</guid>

					<description><![CDATA[之前说过可以用php实现音乐列表json数据，现在音乐文件放在fnos里，alist能加载webdav访问fn [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>之前说过可以<a href="https://hjyl.org/php-json-list-music/">用php实现音乐列表json数据</a>，现在音乐文件放在fnos里，alist能加载webdav访问fnos里的音乐，但fnos本身没有php环境，不能用php。后来想到用docker创建php镜像，在php镜像里访问音乐文件夹，使用php命令搞定(>php music.php)。</p>



<p>顺便推荐一个docker镜像地址：<a href="https://hjyl.org/go/aHR0cHM6Ly8xbXMucnVuLw==" rel="nofollow" target="_blank">https://1ms.run/</a>，好厉害，能根据IP地址限制高速流量。如果有更好用的docker镜像，也欢迎推介。</p>
<div id="content-copyright"><span style="font-weight:bold;text-shadow:0 1px 0 #ddd;font-size: 13px;">版权声明: </span><span style="font-size: 13px;">本文采用 <a href="https://hjyl.org/go/aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzMuMC8=" rel="nofollow" target="_blank">BY-NC-SA</a> 协议进行授权，如无注明均为原创，转载请注明转自 <a href="https://hjyl.org">皇家元林</a><br>本文链接: <a rel="bookmark" title="docker还能这么用" href="https://hjyl.org/docker-php-music-json/">docker还能这么用</a></span></div>]]></content:encoded>
					
					<wfw:commentRss>https://hjyl.org/docker-php-music-json/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>PHP实现音乐列表json配置文件</title>
		<link>https://hjyl.org/php-json-list-music/</link>
					<comments>https://hjyl.org/php-json-list-music/#comments</comments>
		
		<dc:creator><![CDATA[皇家元林]]></dc:creator>
		<pubDate>Sun, 28 Apr 2024 11:37:01 +0000</pubDate>
				<category><![CDATA[元林手札]]></category>
		<category><![CDATA[getid3()]]></category>
		<category><![CDATA[GPT3.5]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[无损音乐]]></category>
		<guid isPermaLink="false">https://hjyl.org/?p=5053</guid>

					<description><![CDATA[之前改了个静态网页播放器播放本地音乐的网站，当时就是用json配置文件收集音乐信息，只是收集上千首音乐信息比较 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>之前改了个<a href="https://hjyl.org/javascript-html5-music-aplayer/">静态网页播放器</a>播放本地音乐的网站，当时就是用json配置文件收集音乐信息，只是收集上千首音乐信息比较复杂，是将数据输出到Excel表格，通过Excel公式实现的。最近感觉太麻烦了，想实现更简单的方法，最后从GPT3.5上得到了通过PHP实现这样的功能。</p>



<h3 class="wp-block-heading">json数据格式</h3>



<p>和之前是一样的。</p>



<pre class="wp-block-code"><code lang="" class=" line-numbers">[<br>    {<br>        "url":"URL地址",<br>        "name":"歌曲名",<br>        "artist":"歌手",<br>        "lrc":"歌词地址URL"<br>    },<br>    {<br>        "url":"URL地址",<br>        "name":"歌曲名",<br>        "artist":"歌手",<br>        "lrc":"歌词地址URL"<br>    },<br>    {<br>        "url":"URL地址",<br>        "name":"歌曲名",<br>        "artist":"歌手",<br>        "lrc":"歌词地址URL"<br>    }<br>]</code></pre>



<h3 class="wp-block-heading">功能代码PHP</h3>



<pre class="wp-block-code"><code lang="" class="">//音乐文件所在的目录
$musicDirectory = 'Music';

function scanMusicDirectory($dir)
{
    $files = array_diff(scandir($dir), array('..', '.'));

    //初始化数组
    $musicFiles = array();

    //统计文件夹下音乐数量，因为一个音乐+一个歌词文件，所以得除以2
    $i = (count(scandir($dir)))/2;

    foreach ($files as $file) {

        $filePath = $dir . '/' . $file;

        //自定义歌曲网络路径
        $musicHttp = "https://alist.hjyl.org/";

        if (is_dir($filePath)) {
            //如果是目录，则递归扫描目录下的音乐文件
            $musicFiles = array_merge($musicFiles, scanMusicDirectory($filePath));
        } else if (pathinfo($filePath, PATHINFO_EXTENSION) == 'mp3' || pathinfo($filePath, PATHINFO_EXTENSION) == 'flac') {
            //如果是音乐文件，则将文件路径添加到数组中
            //通过分隔符获取音乐文件名
            $fileName = explode(".".pathinfo($filePath, PATHINFO_EXTENSION), $filePath);
            //通过分隔符获取演唱者
            $artist = explode(" - ", $fileName[0]);
            //通过分隔符获取歌曲名
            $name = explode("/", $artist[0]);
         
            $musicFiles[] = array('id' => $i--, 'url' => $musicHttp . $filePath, 'name' => $name[1], 'artist' => trim($artist[1], " "), 'lrc' => $musicHttp . $fileName[0].".lrc");

        }
        
    }

    return $musicFiles;
}

$musicFiles = scanMusicDirectory($musicDirectory);

//JSON_UNESCAPED_UNICODE解决中文乱码，JSON_UNESCAPED_SLASHES解决输出内容有反斜杠
$jsonData = json_encode($musicFiles, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

//将生成的JSON数据写入到文件中
file_put_contents('music.json', $jsonData); 

echo 'JSON文件生成成功！';</code></pre>



<p>将上面代码保存为music.php，设置音乐文件夹路径，既可以在浏览器中执行，又可以在SSH终端里执行。最后同目录下music.json文件就是所需要的配置文件了。只是这个歌曲顺序不太清楚是按什么顺序来的，前面字符、数字和英文是正常的升序，但是后面的中文就有点乱来了，不过不一样，比我手动编辑快多了。</p>



<h3 class="wp-block-heading">关于getid3</h3>



<p>PHP有一个脚本可以提取文件标签信息，包括音频、视频，它叫<a href="https://hjyl.org/go/aHR0cHM6Ly93d3cuZ2V0aWQzLm9yZy8=" rel="nofollow" target="_blank">getID3()</a>。所以如果用这个脚本，功能代码是这样的。当然前提是你将getid3脚本文件拷到当前文件夹下，然后才能调用。</p>



<pre class="wp-block-code"><code lang="" class="">//音乐文件所在的目录<br>$musicDirectory = 'Music';<br><br>require_once "./getid3/getid3.php";<br>require_once "./getid3/getid3.lib.php";<br>function scanMusicDirectory($dir)<br>{<br>    $files = array_diff(scandir($dir), array('..', '.'));<br><br>    //初始化数组<br>    $musicFiles = array();<br><br>    //统计文件夹下音乐数量，因为一个音乐+一个歌词文件，所以得除以2<br>    $i = (count(scandir($dir)))/2;<br><br>    foreach ($files as $file) {<br><br>        $filePath = $dir . '/' . $file;<br><br>        //自定义歌曲网络路径<br>        $musicHttp = "https://alist.hjyl.org/";<br><br>        if (is_dir($filePath)) {<br>            //如果是目录，则递归扫描目录下的音乐文件<br>            $musicFiles = array_merge($musicFiles, scanMusicDirectory($filePath));<br>        } else if (pathinfo($filePath, PATHINFO_EXTENSION) == 'mp3' || pathinfo($filePath, PATHINFO_EXTENSION) == 'flac') {<br>            //如果是音乐文件，则将文件路径添加到数组中<br>            //通过分隔符获取音乐文件名<br>            $fileName = explode(".".pathinfo($filePath, PATHINFO_EXTENSION), $filePath);<br><br>            //调用getid3方法<br>            $getID3 = new getID3;<br>            $music = $getID3-&gt;analyze($filePath);<br>            $musicFiles[] = array('id' =&gt; $i--, 'url' =&gt; $musicHttp . $filePath, 'name' =&gt; $music["comments"]["title"][0], 'artist' =&gt; $music["comments"]["artist"][0], 'lrc' =&gt; $musicHttp . $fileName[0].".lrc");<br>        }<br>        <br>    }<br><br>    return $musicFiles;<br>}<br><br>$musicFiles = scanMusicDirectory($musicDirectory);<br><br>$jsonData = json_encode($musicFiles, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);<br><br>//将生成的JSON数据写入到文件中<br>file_put_contents('music.json', $jsonData); <br><br>echo 'JSON文件生成成功！';</code></pre>



<p>不过可惜的是，无论是在浏览器还是终端中执行，两种方法都不是很完美。如果是在浏览器中执行，音乐文件和PHP需要处在同一级别目录，或者音乐文件处在PHP下一级目录都可以，但是我的音乐文件是在另一个磁盘里，浏览器获取不到路径权限，而这个在终端里执行却是可以的。但是终端又只能运行单PHP文件，而获取不到getid3脚本功能。所以最后我还是放弃了这个脚本。</p>



<p>其实用这个脚本，主要还是获取音乐封面，我收集的都是无损音乐，主要是flac格式，还有一小部分mp3格式，但是都内置有封面信息。如果可以直接提取，我就不用再通过js提取了。不过二者结果是一样的。而且js可以将base64图片地址转换为blob地址，PHP却不行，后来了解到blob链接只是浏览器内部生成的临时链接，不能被保存到文件，更不能被永久读取，所以就更不需要getid3脚本了。只是base64编码地址太长了，整套下来，终端都崩溃了。于是封面还是保留了之前的处理方式。</p>



<p>上面的代码仅供参考吧！</p>
<div id="content-copyright"><span style="font-weight:bold;text-shadow:0 1px 0 #ddd;font-size: 13px;">版权声明: </span><span style="font-size: 13px;">本文采用 <a href="https://hjyl.org/go/aHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLXNhLzMuMC8=" rel="nofollow" target="_blank">BY-NC-SA</a> 协议进行授权，如无注明均为原创，转载请注明转自 <a href="https://hjyl.org">皇家元林</a><br>本文链接: <a rel="bookmark" title="PHP实现音乐列表json配置文件" href="https://hjyl.org/php-json-list-music/">PHP实现音乐列表json配置文件</a></span></div>]]></content:encoded>
					
					<wfw:commentRss>https://hjyl.org/php-json-list-music/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
