def md_convert(projectName, url): resp = requests.get(url) content = resp.text # conText = cc.convert(conText) # conText = translator.translate(conText, src='en',dest='zh-tw').text if not os.path.isdir("output/makecode/" + projectName): os.mkdir("output/makecode/" + projectName) pages = content.split("## Part") step = 0 scriptIdx = 0 for p in pages: templete = junyiJSONgenerate.JSON_open('src\Templete\JSONempty') content = p.replace("\n", "\\n") content = content.replace('"', '\\"') content = "#" + content iframeIdx = 0 iframeBlock = '' while 1: if (content.find("```") == -1): break pre = content.find("```", 0) content = content.replace("```", "", 1) bac = content.find("```", 0) content = content.replace("```", "", 1) # script = content[pre:bac] try: content = content[: pre] + "[[☃ iframe %s]]\\n\\n[[☃ iframe %s]]" % ( iframeIdx * 2 + 1, iframeIdx * 2 + 2) + content[bac:] scriptIdx += 1 iframeUrl = "https://jerry914.github.io/arcade-test/" + projectName + "/" + str( scriptIdx) + ".html" ifTemplete = junyiJSONgenerate.JSON_open( 'src\Templete\JSONiframe') iframeBlock += ifTemplete.replace( "https://ys-fang.github.io/Linkit7697Learning-Resources/bubble/ROUTE/BUBBLEIDX.html", iframeUrl) iframeBlock = iframeBlock.replace("IFRAMEIDX", str(iframeIdx * 2 + 2)) iframeIdx += 1 except Exception as e: print(e) content = content.replace("`", "") while 1: if (content.find("|") == -1): break pre = content.find("|", 0) content = content.replace("|", "", 1) if (content[pre] == '|'): content = content.replace("|", "", 1) bac = content.find("|", 0) content = content.replace("|", "", 1) if (content[bac] == '|'): content = content.replace("|", "", 1) tag = content[pre:bac].split(":")[0] try: keyword = content[pre:bac].split(":")[1] content = content[:pre] + addColor(tag, keyword) + content[bac:] except Exception as e: print(e) content = content.replace('"', '\\"') output = templete.replace("CONTENT", content) if (output.find("iframe") == -1): output = output.replace("WIDGETS", "") else: output = output.replace("WIDGETS", iframeBlock[:-1]) junyiJSONgenerate.JSON_write( output, "output/makecode/" + projectName + "/" + str(step)) step += 1 output = output.replace("\n", "") with open('output/junyi.csv', 'a+', newline='', encoding='utf8') as csvfile: writer = csv.writer(csvfile) writer.writerow( ['0', 'False', '電腦科學', '', projectName, '1', output, '', '']) csvfile.close()
def addAuth(projectName, step): content = junyiJSONgenerate.JSON_open("output/raspberrypilearning/" + projectName + "/" + projectName + "-" + step) if (step == str(1)): content = content.replace( "[[☃ article-block 1]]", "[[☃ article-block 1]]\\n---\\n#### **#致謝與授權**\\n####本課程係由均一教育平台(Junyi Academy)進行中文化翻譯與衍生創作,採用[創用 CC 姓名標示 4.0 國際](https://creativecommons.org/licenses/by/4.0/deed.zh_TW \\\"\\\"\\\"\\\" \\\"\\\"_blank\\\"\\\") 授權條款釋出。內容源自CC授權課程:[" + exportCSV.getdata(projectName).name + " (CodeClub)](https://projects.raspberrypi.org/en/projects/" + projectName + " \\\"\\\"\\\"\\\" \\\"\\\"_blank\\\"\\\") 。\\n\\n####CodeClub 是由 Raspberry Pi Foundation 主持的一個計畫,也是一個位於英國的非營利組織。CodeClub是正在成長的全球性運動的一部分,目標是將運算思維與數位創作能力帶到世界上每一個人的手中。\\n[[☃ image 1]]", 1) content = content.replace( '"widgets": {', '''"widgets": {"image 1": { "type": "image", "graded": true, "options": { "range": [ [ 0, 10 ], [ 0, 10 ] ], "box": [ 75, 26 ], "useBoxSize": true, "backgroundImage": { "url": "https://ys-fang.github.io/cc_logos/by-sa.png", "width": 75, "height": 26 }, "labels": [], "maxImageSize": 435, "aspectRatio": 0.34987593052109184 }, "version": { "major": 0, "minor": 0 } },''', 1) else: content = content.replace( "[[☃ article-block 1]]", "[[☃ article-block 1]]\\n\\n[[☃ explanation 1]]", 1) content = content.replace( '"widgets": {', '''"widgets": {"explanation 1": { "type": "explanation", "graded": false, "options": { "showPrompt": "關於課程", "hidePrompt": "隱藏說明", "explanation": "---\\n#### **#致謝與授權**\\n####本課程係由均一教育平台(Junyi Academy)進行中文化翻譯與衍生創作,採用[創用 CC 姓名標示 4.0 國際](https://creativecommons.org/licenses/by/4.0/deed.zh_TW \\\"\\\"\\\"\\\" \\\"\\\"_blank\\\"\\\") 授權條款釋出。內容源自CC授權課程:[%s (CodeClub)](https://projects.raspberrypi.org/en/projects/%s \\\"\\\"\\\"\\\" \\\"\\\"_blank\\\"\\\") 。\\n\\n####CodeClub 是由 Raspberry Pi Foundation 主持的一個計畫,也是一個位於英國的非營利組織。CodeClub是正在成長的全球性運動的一部分,目標是將運算思維與數位創作能力帶到世界上每一個人的手中。\\n[[☃ image 1]]", "widgets": { "image 1": { "id": "image 1", "type": "image", "graded": true, "options": { "range": [ [ 0, 10 ], [ 0, 10 ] ], "box": [ 75, 26 ], "useBoxSize": true, "backgroundImage": { "url": "https://ys-fang.github.io/cc_logos/by-sa.png", "width": 75, "height": 26 }, "labels": [], "maxImageSize": 435, "aspectRatio": 0.34987593052109184 }, "version": { "major": 0, "minor": 0 } } } }, "version": { "major": 0, "minor": 0 } },''' % (exportCSV.getdata(projectName).name, projectName), 1) junyiJSONgenerate.JSON_write( content, "output/raspberrypilearning/" + projectName + "/" + projectName + "-" + step) return content
def md_convert(projectName,step): url = 'https://raw.githubusercontent.com/raspberrypilearning/'+projectName+'/master/en/step_'+step+'.md' resp = requests.get(url) # mark = marko.convert(resp.text) # mark = resp.text # soup = BeautifulSoup(mark, 'html.parser') conText = resp.text # conText = cc.convert(conText) # conText = translator.translate(conText, src='en',dest='zh-tw').text iframeBlock = "" try: content = conText[:conText.index('<div')]+conText[conText.index('</div'):] content = content.replace("</div>","[[☃ iframe 1]]",1) content = content.replace("</div>","") iframeUrl = get_tag(url,'iframe')['src'] # micro bit spacail # iframeID = get_tag(url,'iframe')['src'].split("id=")[1] # iframeUrl = "https://ys-fang.github.io/msmc/player.html?id="+iframeID ifTemplete = junyiJSONgenerate.JSON_open('src\Templete\JSONiframe') iframeBlock = ifTemplete.replace("https://ys-fang.github.io/Linkit7697Learning-Resources/bubble/ROUTE/BUBBLEIDX.html",iframeUrl) iframeBlock = iframeBlock.replace("IFRAMEIDX",str(1)) except Exception as e: content = conText print(e) imgIdx = 0 while(content.find("![screenshot]",0)>0): imgIdx+=1 content = content.replace("![screenshot]","[[☃ image "+str(imgIdx)+"]]",1) content = content.replace("(images/","(https://raw.githubusercontent.com/raspberrypilearning/"+projectName+"/master/en/images/") imgLink = re.findall(r'[(](https://raw.*?)[)]', content) content = re.sub(r'[(](https://raw.*?)[)]', "", content) while(imgIdx>0): templete = junyiJSONgenerate.JSON_open('src\Templete\JSONimage') string = templete.replace("IMGBLOCKINDEX",str(imgIdx)) string = string.replace("https://ys-fang.github.io/Linkit7697Learning-Resources/img/ROUTE/IMGIDX.gif",imgLink[imgIdx-1]) string = string.replace("IMAGEWIDTH",str(imgDownload.search_img_width(imgLink[imgIdx-1]).width)) string = string.replace("IMAGEHEIGHT",str(imgDownload.search_img_width(imgLink[imgIdx-1]).height)) imgIdx-=1 iframeBlock += string iframeBlock = iframeBlock[:-1] while 1: if(content.find('<a')>=0): try: a_link = get_tag(url,'a') content = content[:content.index('<a')]+"["+a_link.text+"](\""+a_link["href"]+"\",\" \" \"_blank\")"+content[content.index('</a>')+4:] except Exception as e: break else: break content = content.replace("){:target=\"_blank\"}"," \"_blank\" \"title\")") content = content.replace("--- no-print ---","") content = content.replace("--- /no-print ---","") # content = translator.translate(content, src='en',dest='zh-tw').text # content = content.replace("# "," **") articleBlockIdx = 1 articleBlockContent = "" while 1: tempCont = content if(tempCont.find('--- collapse ---')>0): content = tempCont[:tempCont.index('--- collapse ---')]+"[[☃ article-block "+str(articleBlockIdx)+"]]"+tempCont[tempCont.index('--- /collapse ---')+17:] arTemplete = junyiJSONgenerate.JSON_open('src\Templete\JSONartblo') artTemp = (tempCont[tempCont.index('--- collapse ---')+17:tempCont.index('--- /collapse ---')]).replace('"','\\"') title = artTemp[artTemp.find("---")+3:artTemp.find("---",1)] artTemp = artTemp.replace("\n","\\n") title = title.replace("\n","") artTemp = artTemp.replace(title,"") articleBlock = arTemplete.replace("CONTENT",artTemp) articleBlock = articleBlock.replace("TITLE",title.replace("title:","📍")) articleBlock = articleBlock.replace("ARTICLEIDX",str(articleBlockIdx)) articleBlockContent+=articleBlock articleBlockIdx+=1 elif(tempCont.find('--- hints ---')>0): content = tempCont[:tempCont.index('--- hints ---')]+"[[☃ article-block "+str(articleBlockIdx)+"]]"+tempCont[tempCont.index('--- /hints ---')+17:] arTemplete = junyiJSONgenerate.JSON_open('src\Templete\JSONartblo') artTemp = (tempCont[tempCont.index('--- hints ---')+17:tempCont.index('--- /hints ---')]).replace('"','\\"') # title = artTemp[artTemp.find("---")+3:artTemp.find("---",1)] artTemp = artTemp.replace("\n","\\n") artTemp = artTemp.replace("--- hint ---","") artTemp = artTemp.replace("--- /hint ---","") # title = title.replace("\n","") # artTemp = artTemp.replace(title,"") articleBlock = arTemplete.replace("CONTENT",artTemp) articleBlock = articleBlock.replace("TITLE",r"💡 我需要一點提示") articleBlock = articleBlock.replace("#fee","#ffe7c9") articleBlock = articleBlock.replace("ARTICLEIDX",str(articleBlockIdx)) articleBlockContent+=articleBlock articleBlockIdx+=1 elif(tempCont.find('--- task ---')>0): content = tempCont[:tempCont.index('--- task ---')]+"[[☃ article-block "+str(articleBlockIdx)+"]]"+tempCont[tempCont.index('--- /task ---')+13:] arTemplete = junyiJSONgenerate.JSON_open('src\Templete\JSONartblo') artTemp = (tempCont[tempCont.index('--- task ---')+13:tempCont.index('--- /task ---')]).replace('"','\\"') artTemp = artTemp.replace("\n","\\n") artTemp = artTemp.replace("--- hint ---","") artTemp = artTemp.replace("--- /hint ---","") articleBlock = arTemplete.replace("CONTENT",artTemp) articleBlock = articleBlock.replace("TITLE","") articleBlock = articleBlock.replace("#fee","#eafaec") articleBlock = articleBlock.replace("ARTICLEIDX",str(articleBlockIdx)) articleBlock = articleBlock.replace("expandable\": true","expandable\": false") articleBlockContent+=articleBlock articleBlockIdx+=1 else: break # print(get_tag_text(url,'h2')) # print(get_tag(url,'a')) # print(get_tag_text(url,'li')) templete = junyiJSONgenerate.JSON_open('src\Templete\JSONempty') content = content.replace("\n","\\n") content = content.replace('"','\\"') output = templete.replace("CONTENT",content) output = output.replace("WIDGETS",iframeBlock+articleBlockContent[:-1]) print(projectName+str(stepIdx)+"finish!"+stepIdx*"🧨🧨") output = output.replace("}\"article-block","},\"article-block") output = output.replace(" ","") RC = output.replace("/master",'') RC = RC.replace("https://raw.githubusercontent.com/raspberrypilearning","https://raw.githubusercontent.com/ys-fang/Code-Club-Learning-Resources/master") RC = RC.replace("/tree",'') RC = RC.replace("/blob",'') RC = RC.replace("/en/","/zh-CN/") output = RC.replace("https://github.com/raspberrypilearning","https://github.com/ys-fang/Code-Club-Learning-Resources/blob/master") if not os.path.isdir("output/raspberrypilearning/"+projectName): os.mkdir("output/raspberrypilearning/"+projectName) junyiJSONgenerate.JSON_write(output,"output/raspberrypilearning/"+projectName+"/"+projectName+"-"+step)
def md_convert(projectName, stepIdx): step = str(stepIdx) url = 'https://raw.githubusercontent.com/jerry914/Code-Club-Learning-Resources/master/' + projectName + '/zh-TW/step_' + step + '.md' resp = requests.get(url) conText = resp.text iframeBlock = "" try: content = conText[:conText.index('<div')] + conText[conText. index('</div'):] content = content.replace("</div>", "[[☃ iframe 1]]", 1) content = content.replace("</div>", "") iframeUrl = get_tag(url, 'iframe')['src'] if (iframeUrl.find("https") == -1): iframeUrl = "https:" + iframeUrl # micro bit spacail # iframeID = get_tag(url,'iframe')['src'].split("id=")[1] # iframeUrl = "https://ys-fang.github.io/msmc/player.html?id="+iframeID ifTemplete = junyiJSONgenerate.JSON_open(r'src\Templete\JSONiframe') iframeBlock = ifTemplete.replace( "https://ys-fang.github.io/Linkit7697Learning-Resources/bubble/ROUTE/BUBBLEIDX.html", iframeUrl) iframeBlock = iframeBlock.replace("IFRAMEIDX", str(1)) iframeBlock = iframeBlock.replace("320", str(480)) except Exception as e: content = conText print(e) while 1: if (content.find('<a') >= 0): try: a_link = get_tag(url, 'a') content = content[:content.index( '<a')] + "[" + a_link.text + "](\"" + a_link[ "href"] + "\",\" \" \"_blank\")" + content[ content.index('</a>') + 4:] except Exception as e: break else: break content = keyDelet(content) content = content.replace("){:target=\"_blank\"}", " \"_blank\" \"title\")") content = content.replace(r"## \--- collapse \---", "--- collapse ---") content = content.replace(r"\--- /collapse \---", "--- /collapse ---") content = content.replace("<kbd>", "`") content = content.replace("</kbd>", "`") content = content.replace( "(resources", "(https://github.com/ys-fang/Code-Club-Learning-Resources/tree/master/" + projectName + "/zh-TW/resources/") if (step == '1'): content = content.replace(" \"_blank\" \"title\"", "") content = content.replace(")", " \"_blank\" \"title\")") content = content.replace(" +", "tab&mark") content = content.replace("+ ", "\\n---\\n$\\\\\\\$\\n\\n+ ✅ ") content = content.replace("tab&mark", " +") # title modify collTitle = [] try: h1Title = get_tag_text(url, 'h2') for h1 in h1Title: if (h1.text.find("collapse") == -1): content = content.replace("## " + h1.text, "# **" + h1.text + "**") collTitle.append(h1.text) except Exception as e: print(h1Title) try: h2Title = get_tag_text(url, 'h3') for h2 in h2Title: content = content.replace("### " + h2.text, "## **" + h2.text + "**") except Exception as e: print(e) try: h3Title = get_tag_text(url, 'h4') for h3 in h3Title: content = content.replace("### " + h3.text, "### **" + h3.text + "**") except Exception as e: print(e) articleBlockIdx = 1 articleBlockContent = "" titleIdx = 1 while 1: tempCont = content if (tempCont.find('--- collapse ---') > 0): content = tempCont[:tempCont.index( '--- collapse ---')] + "[[☃ article-block " + str( articleBlockIdx ) + "]]" + tempCont[tempCont.index('--- /collapse ---') + 17:] arTemplete = junyiJSONgenerate.JSON_open( r'src\Templete\JSONartblo') artTemp = ( tempCont[tempCont.index('--- collapse ---') + 17:tempCont.index('--- /collapse ---')]).replace( '"', '\\"') # title = artTemp[artTemp.find("---")+3:artTemp.find("---",1)] title = collTitle[titleIdx] titleIdx = titleIdx + 1 artTemp = artTemp.replace("\n", "\\n") title = title.replace("\n", "") artTemp = artTemp.replace(title, "") articleBlock = arTemplete.replace("CONTENT", artTemp) articleBlock = articleBlock.replace("TITLE", title.replace("title:", "📍")) articleBlock = articleBlock.replace("ARTICLEIDX", str(articleBlockIdx)) articleBlockContent += articleBlock articleBlockIdx += 1 elif (tempCont.find('--- print-only ---') > 0): content = tempCont[:tempCont. index('--- print-only ---')] + tempCont[ tempCont.index('--- /print-only ---') + 19:] elif (tempCont.find('--- task ---') > 0): content = tempCont[:tempCont.index( '--- task ---')] + "[[☃ article-block " + str( articleBlockIdx ) + "]]" + tempCont[tempCont.index('--- /task ---') + 13:] arTemplete = junyiJSONgenerate.JSON_open( r'src\Templete\JSONartblo') articleBlock = arTemplete.replace("expandable\": true", "expandable\": false") artTemp = (tempCont[tempCont.index('--- task ---') + 13:tempCont.index('--- /task ---')]).replace( '"', '\\"') artTemp = artTemp.replace("\n", "\\n") artTemp = artTemp.replace("--- task ---", "") artTemp = artTemp.replace("--- /task ---", "") wigTemp, artTemp = imgAdd(projectName, artTemp) wigTemp, artTemp = scratchAdd(wigTemp, artTemp, projectName) articleBlock = articleBlock.replace("CONTENT", artTemp) articleBlock = articleBlock.replace("widgets\": {", "widgets\": {" + wigTemp) articleBlock = articleBlock.replace("TITLE", "") articleBlock = articleBlock.replace("#fee", "#eafaec") articleBlock = articleBlock.replace("ARTICLEIDX", str(articleBlockIdx)) articleBlockContent += articleBlock articleBlockIdx += 1 elif (tempCont.find('--- hints ---') > 0): content = tempCont[:tempCont.index( '--- hints ---')] + "[[☃ article-block " + str( articleBlockIdx ) + "]]" + tempCont[tempCont.index('--- /hints ---') + 14:] arTemplete = junyiJSONgenerate.JSON_open( r'src\Templete\JSONartblo') artTemp = (tempCont[tempCont.index('--- hints ---') + 14:tempCont.index('--- /hints ---')]).replace( '"', '\\"') # title = artTemp[artTemp.find("---")+3:artTemp.find("---",1)] artTemp = artTemp.replace("\n", "\\n") artTemp = artTemp.replace("--- hint ---", "") artTemp = artTemp.replace("--- /hint ---", "") wigTemp, artTemp = imgAdd(projectName, artTemp) articleBlock = arTemplete.replace("CONTENT", artTemp) articleBlock = articleBlock.replace("widgets\": {", "widgets\": {" + wigTemp) # title = title.replace("\n","") # artTemp = artTemp.replace(title,"") articleBlock = articleBlock.replace("TITLE", r"💡 我需要一點提示") articleBlock = articleBlock.replace("#fee", "#ffe7c9") articleBlock = articleBlock.replace("ARTICLEIDX", str(articleBlockIdx)) articleBlockContent += articleBlock articleBlockIdx += 1 else: break tempBlock, content = imgAdd(projectName, content) tempBlock, content = scratchAdd(tempBlock, content, projectName) iframeBlock += tempBlock templete = junyiJSONgenerate.JSON_open(r'src\Templete\JSONempty') content = content.replace("\n", "\\n") content = content.replace('"', '\\"') content = content.replace("\\)", ")") output = templete.replace("CONTENT", content) output = output.replace("WIDGETS", iframeBlock + articleBlockContent[:-1]) print(projectName + step + "finish! step- " + step) output = output.replace("}\"article-block", "},\"article-block") output = output.replace(" ", "") output = output.replace("},}", "}}") if not os.path.isdir("output/raspberrypilearning/" + projectName): os.mkdir("output/raspberrypilearning/" + projectName) junyiJSONgenerate.JSON_write( output, "output/raspberrypilearning/" + projectName + "/" + projectName + "-" + step) output = addAuth(projectName, step) output = addBanner(output) junyiJSONgenerate.JSON_write( output, "output/raspberrypilearning/" + projectName + "/" + projectName + "-" + step)
projectName = 'block-out' url = "https://arcade.makecode.com/lessons/" + projectName resp = requests.get(url) soup = BeautifulSoup(resp.text, 'html.parser') content = soup.text pointer = 0 codeBlock = soup.find_all("code", class_="lang-blocks") sctIdx = 0 for b in codeBlock: sctIdx += 1 sct = str(b.text) with open("D:/workspace/arcade-test/" + projectName + "/" + str(sctIdx) + ".html", 'w', encoding='utf8') as f: f.write( junyiJSONgenerate.JSON_open("src/Templete/script").replace( "SCRIPT", sct)) f.close() junyiJSONgenerate.JSON_write(content, "output/makecode/" + projectName) # part = content.split("Part") # partIdx = 0 # for p in part: # junyiJSONgenerate.JSON_write(p,"output/makecode/"+projectName+p[:3].replace("\n","")) # # junyiJSONgenerate.JSON_write(p,"output/makecode/"+str(partIdx)) # partIdx +=1