diff --git a/.gitignore b/.gitignore index 78af7e3..f0d85fd 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,5 @@ # 其他格式的媒体文件 /.venv/ /.idea/ +/__pycache__ +.DS_Store diff --git a/course/704/m3u8/41174fa8-9747-4245-92e5-fec569f8212f.m3u8 b/course/704/m3u8/41174fa8-9747-4245-92e5-fec569f8212f.m3u8 new file mode 100644 index 0000000..c6d7832 --- /dev/null +++ b/course/704/m3u8/41174fa8-9747-4245-92e5-fec569f8212f.m3u8 @@ -0,0 +1,901 @@ +#EXTM3U +#EXT-X-VERSION:3 +#EXT-X-ALLOW-CACHE:NO +#EXT-X-TARGETDURATION:10 +#EXT-X-MEDIA-SEQUENCE:0 +#EXT-X-DISCONTINUITY +#EXTINF:8.316, +/fragments/z1.xuexi.80000002/1751284427117-1751284435433.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284436592-1751284444925.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284444928-1751284453261.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284453273-1751284461607.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284461607-1751284469940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284469934-1751284478267.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284478260-1751284486594.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284486598-1751284494931.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284494929-1751284503262.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284503276-1751284511610.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284511607-1751284519940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284519936-1751284528269.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284528271-1751284536605.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284536608-1751284544941.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284544925-1751284553258.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284553266-1751284561600.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284561605-1751284569938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284569928-1751284578261.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284578267-1751284586601.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284586605-1751284594938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284594937-1751284603270.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284603274-1751284611608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284611620-1751284619953.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284619926-1751284628259.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284628265-1751284636599.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284636608-1751284644941.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284644940-1751284653273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284653274-1751284661608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284661608-1751284669941.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284669941-1751284678274.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284678271-1751284686605.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284686608-1751284694941.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284694936-1751284703269.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284703270-1751284711604.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284711607-1751284719940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284719940-1751284728273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284728274-1751284736608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284736608-1751284744941.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284744940-1751284753273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284753275-1751284761609.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284761607-1751284769940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284769925-1751284778258.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284778270-1751284786604.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284786605-1751284794938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284794949-1751284803282.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284803284-1751284811618.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284811609-1751284819942.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284819943-1751284828276.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284828276-1751284836610.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284836609-1751284844942.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284844928-1751284853261.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284853263-1751284861597.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284861609-1751284869942.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284869936-1751284878269.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284878278-1751284886612.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284886606-1751284894939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284894940-1751284903273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284903274-1751284911608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284911606-1751284919939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284919937-1751284928270.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284928268-1751284936602.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284936609-1751284944942.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284944934-1751284953267.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284953272-1751284961606.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284961601-1751284969934.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284969940-1751284978273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751284978273-1751284986607.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284986594-1751284994927.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751284994928-1751285003261.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285003274-1751285011608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285011608-1751285019941.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285019937-1751285028270.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285028273-1751285036607.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285036606-1751285044939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285044941-1751285053274.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285053272-1751285061606.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285061597-1751285069930.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285069927-1751285078260.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285078268-1751285086602.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285086602-1751285094935.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285094940-1751285103273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285103285-1751285111619.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285111607-1751285119940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285119940-1751285128273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285128273-1751285136607.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285136591-1751285144924.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285144930-1751285153263.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285153274-1751285161608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285161605-1751285169938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285169939-1751285178272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285178273-1751285186607.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285186606-1751285194939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285194940-1751285203273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285203280-1751285211614.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285211616-1751285219949.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285219935-1751285228268.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285228272-1751285236606.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285236614-1751285244947.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285244940-1751285253273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285253272-1751285261606.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285261607-1751285269940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285269940-1751285278273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285278272-1751285286606.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285286603-1751285294936.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285294937-1751285303270.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285303278-1751285311612.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285311607-1751285319940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285319933-1751285328266.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285328270-1751285336604.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285336607-1751285344940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285344939-1751285353272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285353263-1751285361597.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285361591-1751285369924.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285369935-1751285378268.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285378280-1751285386614.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285386601-1751285394934.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285394939-1751285403272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285403269-1751285411603.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285411606-1751285419939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285419939-1751285428272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285428267-1751285436601.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285436603-1751285444936.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285444948-1751285453281.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285453276-1751285461610.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285461601-1751285469934.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285469939-1751285478272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285478279-1751285486613.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285486606-1751285494939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285494938-1751285503271.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285503280-1751285511614.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285511604-1751285519937.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285519941-1751285528274.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285528273-1751285536607.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285536608-1751285544941.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285544939-1751285553272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285553272-1751285561606.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285561605-1751285569938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285569939-1751285578272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285578259-1751285586593.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285586606-1751285594939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285594930-1751285603263.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285603271-1751285611605.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285611605-1751285619938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285619939-1751285628272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285628270-1751285636604.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285636606-1751285644939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285644946-1751285653279.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285653266-1751285661600.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285661605-1751285669938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285669930-1751285678263.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285678281-1751285686615.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285686602-1751285694935.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285694939-1751285703272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285703274-1751285711608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285711607-1751285719940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285719938-1751285728271.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285728262-1751285736596.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285736601-1751285744934.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285744939-1751285753272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285753288-1751285761622.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285761616-1751285769949.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285769951-1751285778284.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285778276-1751285786610.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285786618-1751285794951.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285794939-1751285803272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285803273-1751285811607.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285811609-1751285819942.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285819944-1751285828277.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285828285-1751285836619.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285836613-1751285844946.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285844940-1751285853273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285853276-1751285861610.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285861616-1751285869949.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285869939-1751285878272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285878276-1751285886610.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285886615-1751285894948.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285894944-1751285903277.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285903274-1751285911608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285911611-1751285919944.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285919945-1751285928278.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285928283-1751285936617.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285936625-1751285944958.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285944939-1751285953272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285953273-1751285961607.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285961605-1751285969938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285969941-1751285978274.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751285978287-1751285986621.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285986609-1751285994942.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751285994949-1751286003282.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286003280-1751286011614.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286011616-1751286019949.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286019957-1751286028290.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286028283-1751286036617.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286036605-1751286044938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286044949-1751286053282.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286053286-1751286061620.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286061623-1751286069956.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286069955-1751286078288.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286078284-1751286086618.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286086622-1751286094955.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286094938-1751286103271.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286103272-1751286111606.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286111605-1751286119938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286119939-1751286128272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286128280-1751286136614.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286136607-1751286144940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286144946-1751286153279.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286153292-1751286161626.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286161629-1751286169962.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286169943-1751286178276.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286178276-1751286186610.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286186606-1751286194939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286194939-1751286203272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286203279-1751286211613.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286211627-1751286219960.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286219950-1751286228283.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286228289-1751286236623.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286236604-1751286244937.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286244939-1751286253272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286253275-1751286261609.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286261606-1751286269939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286269959-1751286278292.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286278290-1751286286624.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286286627-1751286294960.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286294950-1751286303283.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286303287-1751286311621.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286311609-1751286319942.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286319940-1751286328273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286328274-1751286336608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286336608-1751286344941.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286344948-1751286353281.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286353288-1751286361622.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286361612-1751286369945.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286369951-1751286378284.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286378291-1751286386625.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286386604-1751286394937.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286394939-1751286403272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286403271-1751286411605.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286411604-1751286419937.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286419947-1751286428280.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286428278-1751286436612.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286436608-1751286444941.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286444960-1751286453293.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286453285-1751286461619.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286461620-1751286469953.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286469938-1751286478271.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286478279-1751286486613.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286486606-1751286494939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286494953-1751286503286.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286503284-1751286511618.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286511625-1751286519958.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286519951-1751286528284.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286528284-1751286536618.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286536617-1751286544950.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286544944-1751286553277.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286553279-1751286561613.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286561605-1751286569938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286569939-1751286578272.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286578274-1751286586608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286586613-1751286594946.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286594948-1751286603281.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286603271-1751286611605.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286611603-1751286619936.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286619938-1751286628271.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286628280-1751286636614.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286636619-1751286644952.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286644956-1751286653289.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286653274-1751286661608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286661627-1751286669960.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286669962-1751286678295.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286678270-1751286686604.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286686609-1751286694942.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286694944-1751286703277.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286703280-1751286711614.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286711606-1751286719939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286719947-1751286728280.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286728283-1751286736617.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286736615-1751286744948.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286744943-1751286753276.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286753271-1751286761605.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286761603-1751286769936.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286769937-1751286778270.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286778279-1751286786613.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286786607-1751286794940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286794957-1751286803290.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286803289-1751286811623.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286811612-1751286819945.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286819947-1751286828280.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286828269-1751286836603.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286836609-1751286844942.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286844944-1751286853277.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286853280-1751286861614.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286861612-1751286869945.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286869941-1751286878274.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286878289-1751286886623.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286886623-1751286894956.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286894950-1751286903283.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286903269-1751286911603.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286911607-1751286919940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286919948-1751286928281.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286928272-1751286936606.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286936607-1751286944940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286944946-1751286953279.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286953292-1751286961626.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286961619-1751286969952.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286969957-1751286978290.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751286978270-1751286986604.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286986619-1751286994952.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751286994938-1751287003271.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287003270-1751287011604.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287011606-1751287019939.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287019949-1751287028282.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287028290-1751287036624.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287036625-1751287044958.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287044936-1751287053269.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287053269-1751287061603.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287061603-1751287069936.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287069946-1751287078279.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287078283-1751287086617.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287086605-1751287094938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287094950-1751287103283.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287103289-1751287111623.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287111622-1751287119955.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287119947-1751287128280.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287128276-1751287136610.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287136603-1751287144936.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287144936-1751287153269.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287153277-1751287161611.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287161604-1751287169937.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287169953-1751287178286.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287178279-1751287186613.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287186621-1751287194954.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287194935-1751287203268.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287203271-1751287211605.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287211604-1751287219937.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287219940-1751287228273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287228285-1751287236619.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287236604-1751287244937.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287244936-1751287253269.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287253288-1751287261622.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287261604-1751287269937.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287269945-1751287278278.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287278270-1751287286604.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287286605-1751287294938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287294947-1751287303280.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287303287-1751287311621.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287311610-1751287319943.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287319943-1751287328276.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287328281-1751287336615.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287336613-1751287344946.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287344935-1751287353268.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287353273-1751287361607.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287361603-1751287369936.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287369945-1751287378278.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287378281-1751287386615.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287386609-1751287394942.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287394952-1751287403285.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287403271-1751287411605.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287411614-1751287419947.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287419951-1751287428284.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287428270-1751287436604.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287436602-1751287444935.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287444946-1751287453279.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287453284-1751287461618.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287461611-1751287469944.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287469951-1751287478284.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287478281-1751287486615.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287486605-1751287494938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287494945-1751287503278.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287503272-1751287511606.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287511602-1751287519935.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287519937-1751287528270.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287528281-1751287536615.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287536603-1751287544936.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287544950-1751287553283.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287553278-1751287561612.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287561602-1751287569935.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287569935-1751287578268.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287578274-1751287586608.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287586610-1751287594943.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287594937-1751287603270.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287603277-1751287611611.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287611618-1751287619951.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287619952-1751287628285.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287628285-1751287636619.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287636602-1751287644935.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287644940-1751287653273.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287653269-1751287661603.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287661612-1751287669945.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287669938-1751287678271.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287678277-1751287686611.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287686621-1751287694954.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287694973-1751287703306.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287703283-1751287711617.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287711604-1751287719937.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287719941-1751287728274.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287728268-1751287736602.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287736609-1751287744942.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287744936-1751287753269.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287753277-1751287761611.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287761611-1751287769944.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287769953-1751287778286.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287778288-1751287786622.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287786603-1751287794936.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287794937-1751287803270.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287803280-1751287811614.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287811607-1751287819940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287819945-1751287828278.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287828277-1751287836611.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287836610-1751287844943.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287844943-1751287853276.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287853285-1751287861619.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287861601-1751287869934.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287869944-1751287878277.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287878278-1751287886612.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287886607-1751287894940.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287894935-1751287903268.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287903284-1751287911618.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287911620-1751287919953.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287919952-1751287928285.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287928269-1751287936603.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287936602-1751287944935.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287944936-1751287953269.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287953273-1751287961607.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287961605-1751287969938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287969955-1751287978288.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751287978277-1751287986611.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287986612-1751287994945.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751287994954-1751288003287.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751288003268-1751288011602.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288011603-1751288019936.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288019937-1751288028270.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751288028268-1751288036602.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288036605-1751288044938.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288044945-1751288053278.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751288053271-1751288061605.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288061604-1751288069937.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288069945-1751288078278.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751288078270-1751288086604.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288086608-1751288094941.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288094948-1751288103281.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751288103268-1751288111602.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288111611-1751288119944.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288119953-1751288128286.ts +#EXTINF:8.334, +/fragments/z1.xuexi.80000002/1751288128280-1751288136614.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288136601-1751288144934.ts +#EXTINF:8.333, +/fragments/z1.xuexi.80000002/1751288144948-1751288153281.ts +#EXT-X-ENDLIST diff --git a/courses.db b/courses.db index 2a88008..6c4caef 100755 Binary files a/courses.db and b/courses.db differ diff --git a/json/705.json b/json/705.json new file mode 100644 index 0000000..6b5cf69 --- /dev/null +++ b/json/705.json @@ -0,0 +1,761 @@ +{ + "ts": 1751884500178, + "data": [ + { + "id": 14009, + "course_id": 705, + "content": "445ffdf2-f1ea-4d14-9156-3cde96fbe14c.jpg", + "category": "image", + "attachment_id": "445ffdf2-f1ea-4d14-9156-3cde96fbe14c", + "order": 1, + "duration": 1000000000, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:00.107Z", + "attachment": { + "id": 93763, + "attachment_id": "445ffdf2-f1ea-4d14-9156-3cde96fbe14c", + "name": "445ffdf2-f1ea-4d14-9156-3cde96fbe14c.jpg", + "thumb": "", + "raw": "445ffdf2-f1ea-4d14-9156-3cde96fbe14c.jpg", + "size": 78057, + "duration": 0, + "mime_type": "image/jpg", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.042Z", + "updated_at": "2025-07-07T02:02:03.312Z", + "url": "https://bandu-resources.songy.info/7000104757/445ffdf2-f1ea-4d14-9156-3cde96fbe14c.webp", + "raw_url": "https://bandu-resources.songy.info/7000104757/445ffdf2-f1ea-4d14-9156-3cde96fbe14c.jpg", + "thumb_url": "https://bandu-resources.songy.info/7000104757/445ffdf2-f1ea-4d14-9156-3cde96fbe14c.jpg" + } + }, + { + "id": 14010, + "course_id": 705, + "content": "bfb48e3b-752a-4c0c-b2ae-af483c835344.mp3", + "category": "audio", + "attachment_id": "bfb48e3b-752a-4c0c-b2ae-af483c835344", + "order": 2, + "duration": 13390, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:15.543Z", + "attachment": { + "id": 93764, + "attachment_id": "bfb48e3b-752a-4c0c-b2ae-af483c835344", + "name": "bfb48e3b-752a-4c0c-b2ae-af483c835344.mp3", + "thumb": "", + "raw": "bfb48e3b-752a-4c0c-b2ae-af483c835344.mp3", + "size": 107181, + "duration": 13390, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.044Z", + "updated_at": "2025-07-07T02:02:15.538Z", + "url": "https://bandu-resources.songy.info/7000104757/bfb48e3b-752a-4c0c-b2ae-af483c835344.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/bfb48e3b-752a-4c0c-b2ae-af483c835344.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/bfb48e3b-752a-4c0c-b2ae-af483c835344.mp3" + } + }, + { + "id": 14011, + "course_id": 705, + "content": "41f44545-3b5b-4129-b59b-b9a3fcb57696.mp3", + "category": "audio", + "attachment_id": "41f44545-3b5b-4129-b59b-b9a3fcb57696", + "order": 3, + "duration": 39860, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:15.834Z", + "attachment": { + "id": 93765, + "attachment_id": "41f44545-3b5b-4129-b59b-b9a3fcb57696", + "name": "41f44545-3b5b-4129-b59b-b9a3fcb57696.mp3", + "thumb": "", + "raw": "41f44545-3b5b-4129-b59b-b9a3fcb57696.mp3", + "size": 318957, + "duration": 39860, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.047Z", + "updated_at": "2025-07-07T02:02:15.83Z", + "url": "https://bandu-resources.songy.info/7000104757/41f44545-3b5b-4129-b59b-b9a3fcb57696.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/41f44545-3b5b-4129-b59b-b9a3fcb57696.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/41f44545-3b5b-4129-b59b-b9a3fcb57696.mp3" + } + }, + { + "id": 14012, + "course_id": 705, + "content": "6cd0892d-9929-4fa7-b291-81fa79f56340.mp3", + "category": "audio", + "attachment_id": "6cd0892d-9929-4fa7-b291-81fa79f56340", + "order": 4, + "duration": 39380, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:16.163Z", + "attachment": { + "id": 93766, + "attachment_id": "6cd0892d-9929-4fa7-b291-81fa79f56340", + "name": "6cd0892d-9929-4fa7-b291-81fa79f56340.mp3", + "thumb": "", + "raw": "6cd0892d-9929-4fa7-b291-81fa79f56340.mp3", + "size": 315117, + "duration": 39380, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.049Z", + "updated_at": "2025-07-07T02:02:16.158Z", + "url": "https://bandu-resources.songy.info/7000104757/6cd0892d-9929-4fa7-b291-81fa79f56340.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/6cd0892d-9929-4fa7-b291-81fa79f56340.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/6cd0892d-9929-4fa7-b291-81fa79f56340.mp3" + } + }, + { + "id": 14013, + "course_id": 705, + "content": "111cf87e-4812-403e-a8c9-331db2d228f9.mp3", + "category": "audio", + "attachment_id": "111cf87e-4812-403e-a8c9-331db2d228f9", + "order": 5, + "duration": 54430, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:16.449Z", + "attachment": { + "id": 93767, + "attachment_id": "111cf87e-4812-403e-a8c9-331db2d228f9", + "name": "111cf87e-4812-403e-a8c9-331db2d228f9.mp3", + "thumb": "", + "raw": "111cf87e-4812-403e-a8c9-331db2d228f9.mp3", + "size": 435501, + "duration": 54430, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.051Z", + "updated_at": "2025-07-07T02:02:16.444Z", + "url": "https://bandu-resources.songy.info/7000104757/111cf87e-4812-403e-a8c9-331db2d228f9.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/111cf87e-4812-403e-a8c9-331db2d228f9.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/111cf87e-4812-403e-a8c9-331db2d228f9.mp3" + } + }, + { + "id": 14014, + "course_id": 705, + "content": "1216aafa-028f-45b6-832a-10c1ff22928d.jpg", + "category": "image", + "attachment_id": "1216aafa-028f-45b6-832a-10c1ff22928d", + "order": 6, + "duration": 1000000000, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:00.107Z", + "attachment": { + "id": 93768, + "attachment_id": "1216aafa-028f-45b6-832a-10c1ff22928d", + "name": "1216aafa-028f-45b6-832a-10c1ff22928d.jpg", + "thumb": "", + "raw": "1216aafa-028f-45b6-832a-10c1ff22928d.jpg", + "size": 154287, + "duration": 0, + "mime_type": "image/jpg", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.054Z", + "updated_at": "2025-07-07T02:02:06.449Z", + "url": "https://bandu-resources.songy.info/7000104757/1216aafa-028f-45b6-832a-10c1ff22928d.webp", + "raw_url": "https://bandu-resources.songy.info/7000104757/1216aafa-028f-45b6-832a-10c1ff22928d.jpg", + "thumb_url": "https://bandu-resources.songy.info/7000104757/1216aafa-028f-45b6-832a-10c1ff22928d.jpg" + } + }, + { + "id": 14015, + "course_id": 705, + "content": "f3f0cfc6-3032-443c-8a55-1eaaee4efac9.mp3", + "category": "audio", + "attachment_id": "f3f0cfc6-3032-443c-8a55-1eaaee4efac9", + "order": 7, + "duration": 60120, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:16.683Z", + "attachment": { + "id": 93769, + "attachment_id": "f3f0cfc6-3032-443c-8a55-1eaaee4efac9", + "name": "f3f0cfc6-3032-443c-8a55-1eaaee4efac9.mp3", + "thumb": "", + "raw": "f3f0cfc6-3032-443c-8a55-1eaaee4efac9.mp3", + "size": 481005, + "duration": 60120, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.056Z", + "updated_at": "2025-07-07T02:02:16.678Z", + "url": "https://bandu-resources.songy.info/7000104757/f3f0cfc6-3032-443c-8a55-1eaaee4efac9.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/f3f0cfc6-3032-443c-8a55-1eaaee4efac9.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/f3f0cfc6-3032-443c-8a55-1eaaee4efac9.mp3" + } + }, + { + "id": 14016, + "course_id": 705, + "content": "11687bc4-8a6b-4a20-a631-3b7d9e6083cf.mp3", + "category": "audio", + "attachment_id": "11687bc4-8a6b-4a20-a631-3b7d9e6083cf", + "order": 8, + "duration": 47540, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:16.938Z", + "attachment": { + "id": 93770, + "attachment_id": "11687bc4-8a6b-4a20-a631-3b7d9e6083cf", + "name": "11687bc4-8a6b-4a20-a631-3b7d9e6083cf.mp3", + "thumb": "", + "raw": "11687bc4-8a6b-4a20-a631-3b7d9e6083cf.mp3", + "size": 380397, + "duration": 47540, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.058Z", + "updated_at": "2025-07-07T02:02:16.934Z", + "url": "https://bandu-resources.songy.info/7000104757/11687bc4-8a6b-4a20-a631-3b7d9e6083cf.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/11687bc4-8a6b-4a20-a631-3b7d9e6083cf.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/11687bc4-8a6b-4a20-a631-3b7d9e6083cf.mp3" + } + }, + { + "id": 14017, + "course_id": 705, + "content": "aed3554a-f310-46dc-b514-d05c388f6987.mp3", + "category": "audio", + "attachment_id": "aed3554a-f310-46dc-b514-d05c388f6987", + "order": 9, + "duration": 35780, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:17.255Z", + "attachment": { + "id": 93771, + "attachment_id": "aed3554a-f310-46dc-b514-d05c388f6987", + "name": "aed3554a-f310-46dc-b514-d05c388f6987.mp3", + "thumb": "", + "raw": "aed3554a-f310-46dc-b514-d05c388f6987.mp3", + "size": 286317, + "duration": 35780, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.061Z", + "updated_at": "2025-07-07T02:02:17.25Z", + "url": "https://bandu-resources.songy.info/7000104757/aed3554a-f310-46dc-b514-d05c388f6987.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/aed3554a-f310-46dc-b514-d05c388f6987.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/aed3554a-f310-46dc-b514-d05c388f6987.mp3" + } + }, + { + "id": 14018, + "course_id": 705, + "content": "2a211efc-ffdc-4f18-bd99-d8b47e20a457.mp3", + "category": "audio", + "attachment_id": "2a211efc-ffdc-4f18-bd99-d8b47e20a457", + "order": 10, + "duration": 39000, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:17.51Z", + "attachment": { + "id": 93772, + "attachment_id": "2a211efc-ffdc-4f18-bd99-d8b47e20a457", + "name": "2a211efc-ffdc-4f18-bd99-d8b47e20a457.mp3", + "thumb": "", + "raw": "2a211efc-ffdc-4f18-bd99-d8b47e20a457.mp3", + "size": 312045, + "duration": 39000, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.063Z", + "updated_at": "2025-07-07T02:02:17.505Z", + "url": "https://bandu-resources.songy.info/7000104757/2a211efc-ffdc-4f18-bd99-d8b47e20a457.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/2a211efc-ffdc-4f18-bd99-d8b47e20a457.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/2a211efc-ffdc-4f18-bd99-d8b47e20a457.mp3" + } + }, + { + "id": 14019, + "course_id": 705, + "content": "7f6b8545-cbc4-4a2a-91b1-348840b3fb89.mp3", + "category": "audio", + "attachment_id": "7f6b8545-cbc4-4a2a-91b1-348840b3fb89", + "order": 11, + "duration": 37940, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:17.825Z", + "attachment": { + "id": 93773, + "attachment_id": "7f6b8545-cbc4-4a2a-91b1-348840b3fb89", + "name": "7f6b8545-cbc4-4a2a-91b1-348840b3fb89.mp3", + "thumb": "", + "raw": "7f6b8545-cbc4-4a2a-91b1-348840b3fb89.mp3", + "size": 303597, + "duration": 37940, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.065Z", + "updated_at": "2025-07-07T02:02:17.821Z", + "url": "https://bandu-resources.songy.info/7000104757/7f6b8545-cbc4-4a2a-91b1-348840b3fb89.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/7f6b8545-cbc4-4a2a-91b1-348840b3fb89.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/7f6b8545-cbc4-4a2a-91b1-348840b3fb89.mp3" + } + }, + { + "id": 14020, + "course_id": 705, + "content": "7aec2fc6-c3e3-4be9-9469-5b651d97e24b.jpg", + "category": "image", + "attachment_id": "7aec2fc6-c3e3-4be9-9469-5b651d97e24b", + "order": 12, + "duration": 1000000000, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:00.107Z", + "attachment": { + "id": 93774, + "attachment_id": "7aec2fc6-c3e3-4be9-9469-5b651d97e24b", + "name": "7aec2fc6-c3e3-4be9-9469-5b651d97e24b.jpg", + "thumb": "", + "raw": "7aec2fc6-c3e3-4be9-9469-5b651d97e24b.jpg", + "size": 195704, + "duration": 0, + "mime_type": "image/jpg", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.067Z", + "updated_at": "2025-07-07T02:02:10.202Z", + "url": "https://bandu-resources.songy.info/7000104757/7aec2fc6-c3e3-4be9-9469-5b651d97e24b.webp", + "raw_url": "https://bandu-resources.songy.info/7000104757/7aec2fc6-c3e3-4be9-9469-5b651d97e24b.jpg", + "thumb_url": "https://bandu-resources.songy.info/7000104757/7aec2fc6-c3e3-4be9-9469-5b651d97e24b.jpg" + } + }, + { + "id": 14021, + "course_id": 705, + "content": "191606d1-5789-4fc7-9be9-d1d726e31767.mp3", + "category": "audio", + "attachment_id": "191606d1-5789-4fc7-9be9-d1d726e31767", + "order": 13, + "duration": 60120, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:18.025Z", + "attachment": { + "id": 93775, + "attachment_id": "191606d1-5789-4fc7-9be9-d1d726e31767", + "name": "191606d1-5789-4fc7-9be9-d1d726e31767.mp3", + "thumb": "", + "raw": "191606d1-5789-4fc7-9be9-d1d726e31767.mp3", + "size": 481005, + "duration": 60120, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.07Z", + "updated_at": "2025-07-07T02:02:18.02Z", + "url": "https://bandu-resources.songy.info/7000104757/191606d1-5789-4fc7-9be9-d1d726e31767.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/191606d1-5789-4fc7-9be9-d1d726e31767.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/191606d1-5789-4fc7-9be9-d1d726e31767.mp3" + } + }, + { + "id": 14022, + "course_id": 705, + "content": "609d091e-2674-42f8-bbcf-824506389baa.mp3", + "category": "audio", + "attachment_id": "609d091e-2674-42f8-bbcf-824506389baa", + "order": 14, + "duration": 31220, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:18.266Z", + "attachment": { + "id": 93776, + "attachment_id": "609d091e-2674-42f8-bbcf-824506389baa", + "name": "609d091e-2674-42f8-bbcf-824506389baa.mp3", + "thumb": "", + "raw": "609d091e-2674-42f8-bbcf-824506389baa.mp3", + "size": 249837, + "duration": 31220, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.072Z", + "updated_at": "2025-07-07T02:02:18.261Z", + "url": "https://bandu-resources.songy.info/7000104757/609d091e-2674-42f8-bbcf-824506389baa.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/609d091e-2674-42f8-bbcf-824506389baa.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/609d091e-2674-42f8-bbcf-824506389baa.mp3" + } + }, + { + "id": 14023, + "course_id": 705, + "content": "4ff5832d-d6f3-4e97-9380-094d1704d203.mp3", + "category": "audio", + "attachment_id": "4ff5832d-d6f3-4e97-9380-094d1704d203", + "order": 15, + "duration": 55320, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:18.506Z", + "attachment": { + "id": 93777, + "attachment_id": "4ff5832d-d6f3-4e97-9380-094d1704d203", + "name": "4ff5832d-d6f3-4e97-9380-094d1704d203.mp3", + "thumb": "", + "raw": "4ff5832d-d6f3-4e97-9380-094d1704d203.mp3", + "size": 442605, + "duration": 55320, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.074Z", + "updated_at": "2025-07-07T02:02:18.501Z", + "url": "https://bandu-resources.songy.info/7000104757/4ff5832d-d6f3-4e97-9380-094d1704d203.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/4ff5832d-d6f3-4e97-9380-094d1704d203.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/4ff5832d-d6f3-4e97-9380-094d1704d203.mp3" + } + }, + { + "id": 14024, + "course_id": 705, + "content": "b26f1dec-8a32-44b8-aa92-dfd2679b2160.mp3", + "category": "audio", + "attachment_id": "b26f1dec-8a32-44b8-aa92-dfd2679b2160", + "order": 16, + "duration": 40510, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:18.749Z", + "attachment": { + "id": 93778, + "attachment_id": "b26f1dec-8a32-44b8-aa92-dfd2679b2160", + "name": "b26f1dec-8a32-44b8-aa92-dfd2679b2160.mp3", + "thumb": "", + "raw": "b26f1dec-8a32-44b8-aa92-dfd2679b2160.mp3", + "size": 324141, + "duration": 40510, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.077Z", + "updated_at": "2025-07-07T02:02:18.744Z", + "url": "https://bandu-resources.songy.info/7000104757/b26f1dec-8a32-44b8-aa92-dfd2679b2160.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/b26f1dec-8a32-44b8-aa92-dfd2679b2160.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/b26f1dec-8a32-44b8-aa92-dfd2679b2160.mp3" + } + }, + { + "id": 14025, + "course_id": 705, + "content": "4522d8e4-d1f4-424a-a6ce-413c118325c0.mp3", + "category": "audio", + "attachment_id": "4522d8e4-d1f4-424a-a6ce-413c118325c0", + "order": 17, + "duration": 42430, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:18.98Z", + "attachment": { + "id": 93779, + "attachment_id": "4522d8e4-d1f4-424a-a6ce-413c118325c0", + "name": "4522d8e4-d1f4-424a-a6ce-413c118325c0.mp3", + "thumb": "", + "raw": "4522d8e4-d1f4-424a-a6ce-413c118325c0.mp3", + "size": 339501, + "duration": 42430, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.079Z", + "updated_at": "2025-07-07T02:02:18.976Z", + "url": "https://bandu-resources.songy.info/7000104757/4522d8e4-d1f4-424a-a6ce-413c118325c0.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/4522d8e4-d1f4-424a-a6ce-413c118325c0.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/4522d8e4-d1f4-424a-a6ce-413c118325c0.mp3" + } + }, + { + "id": 14026, + "course_id": 705, + "content": "9c63728f-c640-470f-8ee3-36e24b2e12e9.mp3", + "category": "audio", + "attachment_id": "9c63728f-c640-470f-8ee3-36e24b2e12e9", + "order": 18, + "duration": 50830, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:19.226Z", + "attachment": { + "id": 93780, + "attachment_id": "9c63728f-c640-470f-8ee3-36e24b2e12e9", + "name": "9c63728f-c640-470f-8ee3-36e24b2e12e9.mp3", + "thumb": "", + "raw": "9c63728f-c640-470f-8ee3-36e24b2e12e9.mp3", + "size": 406701, + "duration": 50830, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.081Z", + "updated_at": "2025-07-07T02:02:19.221Z", + "url": "https://bandu-resources.songy.info/7000104757/9c63728f-c640-470f-8ee3-36e24b2e12e9.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/9c63728f-c640-470f-8ee3-36e24b2e12e9.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/9c63728f-c640-470f-8ee3-36e24b2e12e9.mp3" + } + }, + { + "id": 14027, + "course_id": 705, + "content": "53b0b9b1-d88a-439b-9ae0-2d659e109237.mp3", + "category": "audio", + "attachment_id": "53b0b9b1-d88a-439b-9ae0-2d659e109237", + "order": 19, + "duration": 51070, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:19.465Z", + "attachment": { + "id": 93781, + "attachment_id": "53b0b9b1-d88a-439b-9ae0-2d659e109237", + "name": "53b0b9b1-d88a-439b-9ae0-2d659e109237.mp3", + "thumb": "", + "raw": "53b0b9b1-d88a-439b-9ae0-2d659e109237.mp3", + "size": 408621, + "duration": 51070, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.084Z", + "updated_at": "2025-07-07T02:02:19.461Z", + "url": "https://bandu-resources.songy.info/7000104757/53b0b9b1-d88a-439b-9ae0-2d659e109237.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/53b0b9b1-d88a-439b-9ae0-2d659e109237.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/53b0b9b1-d88a-439b-9ae0-2d659e109237.mp3" + } + }, + { + "id": 14028, + "course_id": 705, + "content": "d32cd7e1-36f1-4aaf-bad6-35aecee2432b.mp3", + "category": "audio", + "attachment_id": "d32cd7e1-36f1-4aaf-bad6-35aecee2432b", + "order": 20, + "duration": 47060, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:19.715Z", + "attachment": { + "id": 93782, + "attachment_id": "d32cd7e1-36f1-4aaf-bad6-35aecee2432b", + "name": "d32cd7e1-36f1-4aaf-bad6-35aecee2432b.mp3", + "thumb": "", + "raw": "d32cd7e1-36f1-4aaf-bad6-35aecee2432b.mp3", + "size": 376557, + "duration": 47060, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.086Z", + "updated_at": "2025-07-07T02:02:19.71Z", + "url": "https://bandu-resources.songy.info/7000104757/d32cd7e1-36f1-4aaf-bad6-35aecee2432b.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/d32cd7e1-36f1-4aaf-bad6-35aecee2432b.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/d32cd7e1-36f1-4aaf-bad6-35aecee2432b.mp3" + } + }, + { + "id": 14029, + "course_id": 705, + "content": "1e47c09b-6012-46ee-872f-119622704399.mp3", + "category": "audio", + "attachment_id": "1e47c09b-6012-46ee-872f-119622704399", + "order": 21, + "duration": 52580, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:19.965Z", + "attachment": { + "id": 93783, + "attachment_id": "1e47c09b-6012-46ee-872f-119622704399", + "name": "1e47c09b-6012-46ee-872f-119622704399.mp3", + "thumb": "", + "raw": "1e47c09b-6012-46ee-872f-119622704399.mp3", + "size": 420717, + "duration": 52580, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.088Z", + "updated_at": "2025-07-07T02:02:19.96Z", + "url": "https://bandu-resources.songy.info/7000104757/1e47c09b-6012-46ee-872f-119622704399.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/1e47c09b-6012-46ee-872f-119622704399.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/1e47c09b-6012-46ee-872f-119622704399.mp3" + } + }, + { + "id": 14030, + "course_id": 705, + "content": "2e303d67-ab8b-4951-b435-9813ad7daec0.mp3", + "category": "audio", + "attachment_id": "2e303d67-ab8b-4951-b435-9813ad7daec0", + "order": 22, + "duration": 60020, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:20.244Z", + "attachment": { + "id": 93784, + "attachment_id": "2e303d67-ab8b-4951-b435-9813ad7daec0", + "name": "2e303d67-ab8b-4951-b435-9813ad7daec0.mp3", + "thumb": "", + "raw": "2e303d67-ab8b-4951-b435-9813ad7daec0.mp3", + "size": 480237, + "duration": 60020, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.09Z", + "updated_at": "2025-07-07T02:02:20.24Z", + "url": "https://bandu-resources.songy.info/7000104757/2e303d67-ab8b-4951-b435-9813ad7daec0.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/2e303d67-ab8b-4951-b435-9813ad7daec0.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/2e303d67-ab8b-4951-b435-9813ad7daec0.mp3" + } + }, + { + "id": 14031, + "course_id": 705, + "content": "ad3265da-f299-43d0-8ec0-e8c6a49aa4e4.mp3", + "category": "audio", + "attachment_id": "ad3265da-f299-43d0-8ec0-e8c6a49aa4e4", + "order": 23, + "duration": 48360, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:20.483Z", + "attachment": { + "id": 93785, + "attachment_id": "ad3265da-f299-43d0-8ec0-e8c6a49aa4e4", + "name": "ad3265da-f299-43d0-8ec0-e8c6a49aa4e4.mp3", + "thumb": "", + "raw": "ad3265da-f299-43d0-8ec0-e8c6a49aa4e4.mp3", + "size": 386925, + "duration": 48360, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.093Z", + "updated_at": "2025-07-07T02:02:20.479Z", + "url": "https://bandu-resources.songy.info/7000104757/ad3265da-f299-43d0-8ec0-e8c6a49aa4e4.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/ad3265da-f299-43d0-8ec0-e8c6a49aa4e4.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/ad3265da-f299-43d0-8ec0-e8c6a49aa4e4.mp3" + } + }, + { + "id": 14032, + "course_id": 705, + "content": "3ea26f04-0525-4b14-820b-69d32050a19c.mp3", + "category": "audio", + "attachment_id": "3ea26f04-0525-4b14-820b-69d32050a19c", + "order": 24, + "duration": 56830, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:20.722Z", + "attachment": { + "id": 93786, + "attachment_id": "3ea26f04-0525-4b14-820b-69d32050a19c", + "name": "3ea26f04-0525-4b14-820b-69d32050a19c.mp3", + "thumb": "", + "raw": "3ea26f04-0525-4b14-820b-69d32050a19c.mp3", + "size": 454701, + "duration": 56830, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.095Z", + "updated_at": "2025-07-07T02:02:20.717Z", + "url": "https://bandu-resources.songy.info/7000104757/3ea26f04-0525-4b14-820b-69d32050a19c.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/3ea26f04-0525-4b14-820b-69d32050a19c.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/3ea26f04-0525-4b14-820b-69d32050a19c.mp3" + } + }, + { + "id": 14033, + "course_id": 705, + "content": "58278115-d0cd-4246-ae5f-d418aae5be2d.mp3", + "category": "audio", + "attachment_id": "58278115-d0cd-4246-ae5f-d418aae5be2d", + "order": 25, + "duration": 44660, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:20.931Z", + "attachment": { + "id": 93787, + "attachment_id": "58278115-d0cd-4246-ae5f-d418aae5be2d", + "name": "58278115-d0cd-4246-ae5f-d418aae5be2d.mp3", + "thumb": "", + "raw": "58278115-d0cd-4246-ae5f-d418aae5be2d.mp3", + "size": 357357, + "duration": 44660, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.097Z", + "updated_at": "2025-07-07T02:02:20.926Z", + "url": "https://bandu-resources.songy.info/7000104757/58278115-d0cd-4246-ae5f-d418aae5be2d.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/58278115-d0cd-4246-ae5f-d418aae5be2d.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/58278115-d0cd-4246-ae5f-d418aae5be2d.mp3" + } + }, + { + "id": 14034, + "course_id": 705, + "content": "46ef6bde-5c38-4cf8-9772-ee620a64a938.mp3", + "category": "audio", + "attachment_id": "46ef6bde-5c38-4cf8-9772-ee620a64a938", + "order": 26, + "duration": 34270, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:21.172Z", + "attachment": { + "id": 93788, + "attachment_id": "46ef6bde-5c38-4cf8-9772-ee620a64a938", + "name": "46ef6bde-5c38-4cf8-9772-ee620a64a938.mp3", + "thumb": "", + "raw": "46ef6bde-5c38-4cf8-9772-ee620a64a938.mp3", + "size": 274221, + "duration": 34270, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.099Z", + "updated_at": "2025-07-07T02:02:21.167Z", + "url": "https://bandu-resources.songy.info/7000104757/46ef6bde-5c38-4cf8-9772-ee620a64a938.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/46ef6bde-5c38-4cf8-9772-ee620a64a938.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/46ef6bde-5c38-4cf8-9772-ee620a64a938.mp3" + } + }, + { + "id": 14035, + "course_id": 705, + "content": "db6f8718-8c3d-4548-8e95-97b78ab7c562.mp3", + "category": "audio", + "attachment_id": "db6f8718-8c3d-4548-8e95-97b78ab7c562", + "order": 27, + "duration": 40990, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:21.419Z", + "attachment": { + "id": 93789, + "attachment_id": "db6f8718-8c3d-4548-8e95-97b78ab7c562", + "name": "db6f8718-8c3d-4548-8e95-97b78ab7c562.mp3", + "thumb": "", + "raw": "db6f8718-8c3d-4548-8e95-97b78ab7c562.mp3", + "size": 327981, + "duration": 40990, + "mime_type": "audio/mp3", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.102Z", + "updated_at": "2025-07-07T02:02:21.415Z", + "url": "https://bandu-resources.songy.info/7000104757/db6f8718-8c3d-4548-8e95-97b78ab7c562.mp3", + "raw_url": "https://bandu-resources.songy.info/7000104757/db6f8718-8c3d-4548-8e95-97b78ab7c562.mp3", + "thumb_url": "https://bandu-resources.songy.info/7000104757/db6f8718-8c3d-4548-8e95-97b78ab7c562.mp3" + } + }, + { + "id": 14036, + "course_id": 705, + "content": "5c6923c2-e5ea-4eee-83df-7cc311a38cbc.jpg", + "category": "image", + "attachment_id": "5c6923c2-e5ea-4eee-83df-7cc311a38cbc", + "order": 28, + "duration": 1000000000, + "created_at": "2025-07-07T02:02:00.107Z", + "updated_at": "2025-07-07T02:02:00.107Z", + "attachment": { + "id": 93790, + "attachment_id": "5c6923c2-e5ea-4eee-83df-7cc311a38cbc", + "name": "5c6923c2-e5ea-4eee-83df-7cc311a38cbc.jpg", + "thumb": "", + "raw": "5c6923c2-e5ea-4eee-83df-7cc311a38cbc.jpg", + "size": 151428, + "duration": 0, + "mime_type": "image/jpg", + "location": "aliyun_oss", + "created_at": "2025-07-07T02:02:00.104Z", + "updated_at": "2025-07-07T02:02:20.552Z", + "url": "https://bandu-resources.songy.info/7000104757/5c6923c2-e5ea-4eee-83df-7cc311a38cbc.webp", + "raw_url": "https://bandu-resources.songy.info/7000104757/5c6923c2-e5ea-4eee-83df-7cc311a38cbc.jpg", + "thumb_url": "https://bandu-resources.songy.info/7000104757/5c6923c2-e5ea-4eee-83df-7cc311a38cbc.jpg" + } + } + ] +} \ No newline at end of file diff --git a/main.py b/main.py index 9fb460d..904f946 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- from course_content_parser import get_course from course_list_info_parser import insert_data -from markdown_transcribe_hugo import get_content +from markdown_transcribe_hugo import get_content as get_hugo_content if __name__ == '__main__': insert_data() get_course() - get_content() + get_hugo_content() diff --git a/markdown_transcribe_rag.py b/markdown_transcribe_rag.py new file mode 100644 index 0000000..1f7cbb6 --- /dev/null +++ b/markdown_transcribe_rag.py @@ -0,0 +1,233 @@ +# -*- coding: utf-8 -*- +import configparser +import os +import shutil +import sqlite3 +from concurrent.futures import ThreadPoolExecutor +from os import makedirs + +import requests + +import json +from course_content_parser import max_download_threads +from logging_config import setup_logging +from transcribe_media import convert_media +from pathlib import Path + +# 读取配置文件 +config = configparser.ConfigParser() +config.read('config.ini') +# max_download_threads = int(config['DEFAULT']['max_download_threads']) +max_download_threads = 10 + +logger = setup_logging() + +# 定义创建表的SQL语句 +CREATE_TABLE_SQL = """ +CREATE TABLE IF NOT EXISTS audio_transcriptions ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + course_id INTEGER NOT NULL, + filename TEXT NOT NULL, + text TEXT, + UNIQUE(course_id, filename) +); +""" + + +def create_audio_transcriptions_table(db_path): + """ + 创建audio_transcriptions表的函数。 + + 参数: + db_path -- SQLite数据库文件的路径 + """ + # 连接到SQLite数据库 + conn = sqlite3.connect(db_path) + cursor = conn.cursor() + + try: + # 执行创建表的SQL语句 + cursor.execute(CREATE_TABLE_SQL) + logger.info("表audio_transcriptions创建成功。") + except sqlite3.Error as e: + logger.error(f"创建表时出错: {e}") + finally: + # 关闭数据库连接 + conn.close() + + +# 调用函数创建表 +db_path = 'courses.db' # 数据库文件路径 + + +# 下载音频文件 +def download_file(url, local_path): + logger.info("download voice file: " + url + " to " + local_path) + try: + with requests.get(url, stream=True) as r: + r.raise_for_status() + with open(local_path, 'wb') as f: + for chunk in r.iter_content(chunk_size=8192): + f.write(chunk) + if not os.path.exists(local_path): + raise FileNotFoundError(f"文件下载后未找到:{local_path}") + return local_path + except Exception as e: + logger.error(f"下载文件时出错:{e}") + return None + + +# 调用api将语音转换为文本 +def voice2txt(voice_path): + text = convert_media(voice_path, True, False) + return text + + +# 保存文本到数据库 +def save_to_db(course_id, filename, text_value): + conn = sqlite3.connect('courses.db') + cursor = conn.cursor() + cursor.execute("INSERT INTO audio_transcriptions (course_id, filename, text) VALUES (?, ?, ?)", + (course_id, filename, text_value)) + conn.commit() + conn.close() + + +# 检查数据库中是否已存在转换后的文本 +def check_db_for_text(course_id, filename): + conn = sqlite3.connect('courses.db') + cursor = conn.cursor() + cursor.execute("SELECT text FROM audio_transcriptions WHERE course_id=? AND filename=?", (course_id, filename)) + result = cursor.fetchone() + conn.close() + return result[0] if result else None + + +def audio_to_text(audio_url, filename, course_id): + # 检查数据库中是否已存在转换后的文本 + db_text = check_db_for_text(course_id, filename) + if db_text: + logger.info(f"文本已存在,无需重复转换:{filename}") + return db_text # 返回已存在的文本 + + try: + logger.info(f"Downloading audio file: {audio_url}") + download_path = os.path.join('course', filename) + local_audio_path = download_file(audio_url, download_path) + if local_audio_path is None: + logger.error("音频文件下载失败") + return "音频文件下载失败" + text_value = voice2txt(local_audio_path) + if text_value: # 只有当转换成功时才保存到数据库 + save_to_db(course_id, filename, text_value) + os.remove(local_audio_path) + return text_value + except Exception as e: + logger.error(f"转换音频到文本时出错:{e}") + return f"音频转文本失败: {e}" + + +def process_item(item): + if item['category'] == 'text': + return f"{item['content']}\n" + # elif item['category'] == 'image': + # return f"![{item['content']}]({item['attachment']['url']})\n" + elif item['category'] == 'audio': + transcription = audio_to_text(item['attachment']['raw_url'], f"audio_{item['id']}.mp3", item['course_id']) + return f"{transcription}\n" + else: + return "" + # return f"[{item['content']}]({item['attachment']['url']})\n" + + +def process_hugo_item(item): + if item['category'] == 'text': + return f"{item['content']}\n\n" + elif item['category'] == 'image': + return f"![{item['content']}]({item['attachment']['url']})\n\n" + elif item['category'] == 'audio': + transcription = audio_to_text(item['attachment']['raw_url'], f"audio_{item['id']}.mp3", item['course_id']) + return f"![{item['content']}]({item['attachment']['url']})\n\n{transcription}\n\n" + else: + return f"[{item['content']}]({item['attachment']['url']})\n\n" + + +def json_to_markdown(json_file, markdown_file, logseq=False): + p = Path(markdown_file) + + curse_name = p.stem + + try: + logger.info(f"Reading JSON file: {json_file}") + with open(json_file, 'r', encoding='utf-8') as file: + data = json.load(file) + metadata = f'+++\ndate = \'{data['data'][0]['created_at']}\'\ndraft = false\ntitle = \'{curse_name}\'\n+++\n\n' + logger.info(f"Writing Markdown file: {markdown_file}") + with open(markdown_file, 'w', encoding='utf-8') as md_file: + # md_file.write(metadata) + with ThreadPoolExecutor(max_workers=max_download_threads) as executor: # Use a thread pool with 5 threads + futures = [executor.submit(process_hugo_item if logseq else process_item, item) for item in + data['data']] + for future in futures: + md_file.write(future.result()) # Write the result to the Markdown file + if os.path.exists(markdown_file) and os.path.getsize(markdown_file) == 0: + print(f"文件 '{markdown_file}' 是空的,将被删除。") + # 2. 删除文件 + os.remove(markdown_file) + + except Exception as e: + logger.error(f"处理JSON文件时出错:{e}") + + +def get_content(): + # 连接到SQLite数据库 + conn = sqlite3.connect('courses.db') + cursor = conn.cursor() + max_course_id = cursor.execute('SELECT id FROM courses ORDER BY id DESC LIMIT 1') # 获取数据库中最大的课程ID + if max_course_id: + max_course_id = max_course_id.fetchone()[0] + logger.info(f"The maximum course ID is {max_course_id}") + else: + logger.info("No courses found in the database.") + max_course_id = 11 + start_course_id = max_course_id - 5 + + # 查询courses表中的所有课程ID + # cursor.execute('SELECT id, title FROM courses where id >= ?', (1,)) + cursor.execute('SELECT id, title FROM courses where id >= ?', (start_course_id,)) + course_ids_data = cursor.fetchall() + course_ids = [row[0] for row in course_ids_data] + course_ids_dict = dict(course_ids_data) + logger.info(course_ids_dict) + + # 创建json文件夹 + if not os.path.exists('json'): + os.makedirs('json') + + # 先请求全部的链接获取数据,并将获取到的课程信息保存到数据库中 + for course_id in course_ids: + logger.info(f"Processing course ID: {course_id}") + + json_filename = os.path.join('json', f'{course_id}.json') + copy_json_file_name = os.path.join('course', f'{course_id}', 'json', + f'{course_ids_dict[course_id]}.json').replace('?', '?') + # md_file_name = os.path.join('markdown', f'{course_id}', f'{course_ids_dict[course_id]}.md') + # if os.path.exists(json_filename): + # logger.info(f"Course {course_id} JSON file already exists, using local file.") + # makedirs(f'course/{course_id}/json', exist_ok=True) + # shutil.copy2(json_filename, copy_json_file_name) + # json_to_markdown(copy_json_file_name, md_file_name) + # else: + # continue + + logseq_md_file_name = os.path.join('markdown', f'{course_id}-{course_ids_dict[course_id]}.md') + if os.path.exists(json_filename): + logger.info(f"Course {course_id} JSON file already exists, using local file.") + # shutil.copy2(json_filename, copy_json_file_name) + json_to_markdown(json_filename, logseq_md_file_name, logseq=False) + else: + continue + + +if __name__ == '__main__': + get_content()