<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://digida.mgpu.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_Scratch_wikis</id>
	<title>Сравнение Scratch wikis - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://digida.mgpu.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_Scratch_wikis"/>
	<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_Scratch_wikis&amp;action=history"/>
	<updated>2026-10-16T20:00:02Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_Scratch_wikis&amp;diff=45675&amp;oldid=prev</id>
		<title>Patarakin в 05:05, 31 марта 2026</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_Scratch_wikis&amp;diff=45675&amp;oldid=prev"/>
		<updated>2026-03-31T05:05:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 08:05, 31 марта 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Scripting Tutorials&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Scripting Tutorials&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|Description=Это рецепт извлечения данных по MediaWiki API из различных вики площадок, связанных с языком программирования Scratch&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|Description=Это рецепт извлечения данных по MediaWiki API из различных вики площадок, связанных с языком программирования Scratch&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|Field_of_knowledge=Информатика&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|Field_of_knowledge=Информатика&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|Environment=MediaWiki API, Песочница MediaWiki API, R&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|Environment=MediaWiki API, Песочница MediaWiki API, R&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, Scratch&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ============================================&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ============================================&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# СРАВНИТЕЛЬНОЕ ИССЛЕДОВАНИЕ: Scratch Wiki на разных языках&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# СРАВНИТЕЛЬНОЕ ИССЛЕДОВАНИЕ: Scratch Wiki на разных языках&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Анализ совместного редактирования (EN, DE, FR, RU)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Анализ совместного редактирования (EN, DE, FR, RU&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, JP&lt;/ins&gt;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ============================================&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ============================================&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l15&quot;&gt;Строка 15:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 15:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;getwd()&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;getwd()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;setwd(&quot;C:/Users/Evgeny/Documents/R_Text&quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &lt;/ins&gt;setwd(&quot;C:/Users/Evgeny/Documents/R_Text&quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ============================================&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ============================================&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# КОНФИГУРАЦИЯ&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# КОНФИГУРАЦИЯ&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l430&quot;&gt;Строка 430:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 430:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (verbose) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (verbose) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       cat(&amp;quot;\n&amp;quot;, strrep(&amp;quot;─&amp;quot;, 60), &amp;quot;\n&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       cat(&amp;quot;\n&amp;quot;, strrep(&amp;quot;─&amp;quot;, 60), &amp;quot;\n&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       cat(&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;🌐 &lt;/del&gt;ЯЗЫК:&quot;, toupper(lang), &quot;\n&quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       cat(&quot; ЯЗЫК:&quot;, toupper(lang), &quot;\n&quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       cat(strrep(&amp;quot;─&amp;quot;, 60), &amp;quot;\n&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       cat(strrep(&amp;quot;─&amp;quot;, 60), &amp;quot;\n&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l443&quot;&gt;Строка 443:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 443:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (nrow(pages_coauth) == 0) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     if (nrow(pages_coauth) == 0) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       if (verbose) cat(&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;⚠️ &lt;/del&gt;Нет данных для языка&quot;, lang, &quot;\n&quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       if (verbose) cat(&quot;Нет данных для языка&quot;, lang, &quot;\n&quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       results[[lang]] &amp;lt;- NULL&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       results[[lang]] &amp;lt;- NULL&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       next&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;       next&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l486&quot;&gt;Строка 486:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 486:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   cat(&amp;quot;\n\n&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   cat(&amp;quot;\n\n&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   cat(strrep(&amp;quot;═&amp;quot;, 80), &amp;quot;\n&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   cat(strrep(&amp;quot;═&amp;quot;, 80), &amp;quot;\n&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   cat(&quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;📊 &lt;/del&gt;СВОДНАЯ ТАБЛИЦА: СРАВНЕНИЕ SCRATCH WIKI ПО ЯЗЫКАМ\n&quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   cat(&quot;СВОДНАЯ ТАБЛИЦА: СРАВНЕНИЕ SCRATCH WIKI ПО ЯЗЫКАМ\n&quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   cat(strrep(&amp;quot;═&amp;quot;, 80), &amp;quot;\n\n&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   cat(strrep(&amp;quot;═&amp;quot;, 80), &amp;quot;\n\n&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;    &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_Scratch_wikis&amp;diff=45519&amp;oldid=prev</id>
		<title>Patarakin в 05:50, 27 марта 2026</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_Scratch_wikis&amp;diff=45519&amp;oldid=prev"/>
		<updated>2026-03-27T05:50:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 08:50, 27 марта 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Scripting Tutorials&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|Description=Это рецепт извлечения данных по MediaWiki API из различных вики площадок, связанных с языком программирования Scratch&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|Field_of_knowledge=Информатика&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|Environment=MediaWiki API, Песочница MediaWiki API, R&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ============================================&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# ============================================&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_Scratch_wikis&amp;diff=45518&amp;oldid=prev</id>
		<title>Patarakin в 05:48, 27 марта 2026</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_Scratch_wikis&amp;diff=45518&amp;oldid=prev"/>
		<updated>2026-03-27T05:48:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 08:48, 27 марта 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l534&quot;&gt;Строка 534:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 534:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Lesson]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Lesson]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Категория:Scripting Tutorials]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
	<entry>
		<id>http://digida.mgpu.ru/index.php?title=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_Scratch_wikis&amp;diff=44569&amp;oldid=prev</id>
		<title>Patarakin: Новая страница: « &lt;syntaxhighlight lang=&quot;R&quot; line&gt; # ============================================ # СРАВНИТЕЛЬНОЕ ИССЛЕДОВАНИЕ: Scratch Wiki на разных языках # Анализ совместного редактирования (EN, DE, FR, RU) # ============================================  library(tidyverse) library(httr) library(jsonlite)  getwd() setwd(&quot;C:/Users/Evgeny/Documents/R_Text&quot;) # ============================================ #...»</title>
		<link rel="alternate" type="text/html" href="http://digida.mgpu.ru/index.php?title=%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_Scratch_wikis&amp;diff=44569&amp;oldid=prev"/>
		<updated>2026-02-27T07:23:55Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: « &amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt; # ============================================ # СРАВНИТЕЛЬНОЕ ИССЛЕДОВАНИЕ: Scratch Wiki на разных языках # Анализ совместного редактирования (EN, DE, FR, RU) # ============================================  library(tidyverse) library(httr) library(jsonlite)  getwd() setwd(&amp;quot;C:/Users/Evgeny/Documents/R_Text&amp;quot;) # ============================================ #...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;R&amp;quot; line&amp;gt;&lt;br /&gt;
# ============================================&lt;br /&gt;
# СРАВНИТЕЛЬНОЕ ИССЛЕДОВАНИЕ: Scratch Wiki на разных языках&lt;br /&gt;
# Анализ совместного редактирования (EN, DE, FR, RU)&lt;br /&gt;
# ============================================&lt;br /&gt;
&lt;br /&gt;
library(tidyverse)&lt;br /&gt;
library(httr)&lt;br /&gt;
library(jsonlite)&lt;br /&gt;
&lt;br /&gt;
getwd()&lt;br /&gt;
setwd(&amp;quot;C:/Users/Evgeny/Documents/R_Text&amp;quot;)&lt;br /&gt;
# ============================================&lt;br /&gt;
# КОНФИГУРАЦИЯ&lt;br /&gt;
# ============================================&lt;br /&gt;
&lt;br /&gt;
DEFAULT_DELAY &amp;lt;- 0.5&lt;br /&gt;
API_TIMEOUT &amp;lt;- 30&lt;br /&gt;
MAX_RETRIES &amp;lt;- 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Scratch Wiki platforms на разных языках&lt;br /&gt;
SCRATCH_WIKIS &amp;lt;- list(&lt;br /&gt;
  &amp;quot;en&amp;quot; = &amp;quot;https://en.scratch-wiki.info/w/api.php&amp;quot;,&lt;br /&gt;
  &amp;quot;de&amp;quot; = &amp;quot;https://de.scratch-wiki.info/w/api.php&amp;quot;,&lt;br /&gt;
  &amp;quot;fr&amp;quot; = &amp;quot;https://fr.scratch-wiki.info/w/api.php&amp;quot;,&lt;br /&gt;
  &amp;quot;ru&amp;quot; = &amp;quot;https://ru.scratch-wiki.info/w/api.php&amp;quot;&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# УТИЛИТА: Безопасный запрос к API&lt;br /&gt;
# ============================================&lt;br /&gt;
&lt;br /&gt;
safe_get &amp;lt;- function(url = NULL, &lt;br /&gt;
                     params, &lt;br /&gt;
                     max_retries = MAX_RETRIES,&lt;br /&gt;
                     verbose = FALSE) {&lt;br /&gt;
  &lt;br /&gt;
  for (attempt in 1:max_retries) {&lt;br /&gt;
    tryCatch({&lt;br /&gt;
      &lt;br /&gt;
      response &amp;lt;- GET(url, &lt;br /&gt;
                     query = params, &lt;br /&gt;
                     timeout(API_TIMEOUT))&lt;br /&gt;
      &lt;br /&gt;
      if (status_code(response) != 200) {&lt;br /&gt;
        if (verbose) {&lt;br /&gt;
          warning(paste(&amp;quot;HTTP&amp;quot;, status_code(response), &amp;quot;попытка&amp;quot;, attempt))&lt;br /&gt;
        }&lt;br /&gt;
        if (attempt &amp;lt; max_retries) {&lt;br /&gt;
          Sys.sleep(1)&lt;br /&gt;
          next&lt;br /&gt;
        }&lt;br /&gt;
        return(NULL)&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      content_txt &amp;lt;- content(response, as = &amp;quot;text&amp;quot;, encoding = &amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
      return(fromJSON(content_txt))&lt;br /&gt;
      &lt;br /&gt;
    }, error = function(e) {&lt;br /&gt;
      if (verbose) {&lt;br /&gt;
        cat(&amp;quot;Ошибка сети (попытка&amp;quot;, attempt, &amp;quot;):&amp;quot;, e$message, &amp;quot;\n&amp;quot;)&lt;br /&gt;
      }&lt;br /&gt;
      if (attempt &amp;lt; max_retries) {&lt;br /&gt;
        Sys.sleep(1)&lt;br /&gt;
      }&lt;br /&gt;
      return(NULL)&lt;br /&gt;
    })&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return(NULL)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# МОДУЛЬ 1: ПОЛУЧЕНИЕ ВСЕХ СТРАНИЦ С СОАВТОРСТВОМ&lt;br /&gt;
# ============================================&lt;br /&gt;
&lt;br /&gt;
get_all_pages_with_coauthors &amp;lt;- function(base_url,&lt;br /&gt;
                                         max_pages = 1600,&lt;br /&gt;
                                         min_authors = 2,&lt;br /&gt;
                                         delay = DEFAULT_DELAY,&lt;br /&gt;
                                         verbose = TRUE) {&lt;br /&gt;
  &lt;br /&gt;
  if (verbose) {&lt;br /&gt;
    cat(&amp;quot;\n╔════════════════════════════════════════════════╗\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;║  🔍 ПОЛУЧЕНИЕ ВСЕХ СТРАНИЦ С СОАВТОРСТВОМ   ║\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;║  (Universal mode: без категорий)             ║\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;╚════════════════════════════════════════════════╝\n\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;URL:&amp;quot;, base_url, &amp;quot;\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;Максимум страниц для проверки:&amp;quot;, max_pages, &amp;quot;\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;Минимум авторов для отбора:&amp;quot;, min_authors, &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  # === ШАГ 1: Получаем список первых N страниц ===&lt;br /&gt;
  &lt;br /&gt;
  if (verbose) cat(&amp;quot;📄 ШАГ 1: Получение списка всех страниц...\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  params &amp;lt;- list(&lt;br /&gt;
    action = &amp;quot;query&amp;quot;,&lt;br /&gt;
    list = &amp;quot;allpages&amp;quot;,&lt;br /&gt;
    apnamespace = &amp;quot;0&amp;quot;,       # Только основное пространство&lt;br /&gt;
    aplimit = min(max_pages, 1500),  # API лимит&lt;br /&gt;
    apdir = &amp;quot;ascending&amp;quot;,&lt;br /&gt;
    format = &amp;quot;json&amp;quot;&lt;br /&gt;
  )&lt;br /&gt;
  &lt;br /&gt;
  resp &amp;lt;- safe_get(url = base_url, params = params, verbose = FALSE)&lt;br /&gt;
  &lt;br /&gt;
  if (is.null(resp) || is.null(resp$query$allpages)) {&lt;br /&gt;
    cat(&amp;quot;❌ Ошибка получения списка страниц\n&amp;quot;)&lt;br /&gt;
    return(tibble())&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  pages_list &amp;lt;- resp$query$allpages&lt;br /&gt;
  pages_df &amp;lt;- as_tibble(pages_list) %&amp;gt;%&lt;br /&gt;
    select(pageid, title) %&amp;gt;%&lt;br /&gt;
    rename(page_title = title) %&amp;gt;%&lt;br /&gt;
    mutate(pageid = as.numeric(pageid))&lt;br /&gt;
  &lt;br /&gt;
  if (verbose) {&lt;br /&gt;
    cat(&amp;quot;✓ Получено страниц:&amp;quot;, nrow(pages_df), &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  # === ШАГ 2: Проверяем соавторство для каждой страницы ===&lt;br /&gt;
  &lt;br /&gt;
  if (verbose) {&lt;br /&gt;
    cat(&amp;quot;🔗 ШАГ 2: Проверка соавторства (это может занять время)...\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;─────────────────────────────────────────────────────\n&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  pages_with_coauthors &amp;lt;- tibble()&lt;br /&gt;
  checked_count &amp;lt;- 0&lt;br /&gt;
  &lt;br /&gt;
  for (i in seq_len(nrow(pages_df))) {&lt;br /&gt;
    &lt;br /&gt;
    page_title &amp;lt;- pages_df$page_title[i]&lt;br /&gt;
    pageid &amp;lt;- pages_df$pageid[i]&lt;br /&gt;
    &lt;br /&gt;
    # Периодический отчет о прогрессе&lt;br /&gt;
    if (i %% 50 == 0 &amp;amp;&amp;amp; verbose) {&lt;br /&gt;
      cat(&amp;quot;  [&amp;quot;, i, &amp;quot;/&amp;quot;, nrow(pages_df), &amp;quot;] ... проверено &amp;quot;, &lt;br /&gt;
          nrow(pages_with_coauthors), &amp;quot; со соавт.\n&amp;quot;, sep = &amp;quot;&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    # Запрашиваем contributors&lt;br /&gt;
    params &amp;lt;- list(&lt;br /&gt;
      action = &amp;quot;query&amp;quot;,&lt;br /&gt;
      prop = &amp;quot;contributors&amp;quot;,&lt;br /&gt;
      titles = page_title,&lt;br /&gt;
      pclimit = &amp;quot;max&amp;quot;,&lt;br /&gt;
      format = &amp;quot;json&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    &lt;br /&gt;
    resp &amp;lt;- safe_get(url = base_url, params = params, verbose = FALSE)&lt;br /&gt;
    checked_count &amp;lt;- checked_count + 1&lt;br /&gt;
    &lt;br /&gt;
    if (!is.null(resp) &amp;amp;&amp;amp; !is.null(resp$query$pages)) {&lt;br /&gt;
      &lt;br /&gt;
      pages_data &amp;lt;- resp$query$pages&lt;br /&gt;
      &lt;br /&gt;
      # Может быть data.frame (одна страница) или список&lt;br /&gt;
      if (is.data.frame(pages_data)) {&lt;br /&gt;
        pages_list_inner &amp;lt;- list(pages_data)&lt;br /&gt;
      } else {&lt;br /&gt;
        pages_list_inner &amp;lt;- pages_data&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      # Проверяем первую (и единственную) страницу&lt;br /&gt;
      if (length(pages_list_inner) &amp;gt; 0) {&lt;br /&gt;
        api_page &amp;lt;- pages_list_inner[[1]]&lt;br /&gt;
        &lt;br /&gt;
        if (!is.null(api_page$contributors)) {&lt;br /&gt;
          contribs_data &amp;lt;- api_page$contributors&lt;br /&gt;
          &lt;br /&gt;
          # Парсим contributors&lt;br /&gt;
          if (is.data.frame(contribs_data)) {&lt;br /&gt;
            contribs_df &amp;lt;- contribs_data&lt;br /&gt;
          } else if (is.list(contribs_data)) {&lt;br /&gt;
            tryCatch({&lt;br /&gt;
              contribs_df &amp;lt;- bind_rows(contribs_data)&lt;br /&gt;
            }, error = function(e) {&lt;br /&gt;
              contribs_df &amp;lt;&amp;lt;- as.data.frame(&lt;br /&gt;
                do.call(rbind, contribs_data), &lt;br /&gt;
                stringsAsFactors = FALSE&lt;br /&gt;
              )&lt;br /&gt;
            })&lt;br /&gt;
          } else {&lt;br /&gt;
            contribs_df &amp;lt;- NULL&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          # Проверяем количество авторов&lt;br /&gt;
          if (!is.null(contribs_df) &amp;amp;&amp;amp; nrow(contribs_df) &amp;gt;= min_authors) {&lt;br /&gt;
            &lt;br /&gt;
            pages_with_coauthors &amp;lt;- bind_rows(&lt;br /&gt;
              pages_with_coauthors,&lt;br /&gt;
              tibble(&lt;br /&gt;
                pageid = pageid,&lt;br /&gt;
                page_title = page_title,&lt;br /&gt;
                n_authors = nrow(contribs_df)&lt;br /&gt;
              )&lt;br /&gt;
            )&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    Sys.sleep(delay)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (verbose) {&lt;br /&gt;
    cat(&amp;quot;\n✓ Проверка завершена\n\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;🎯 ИТОГИ ОТБОРА:\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;─────────────────────────────────────────────────────\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;Проверено страниц:&amp;quot;, checked_count, &amp;quot;\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;Найдено с ≥&amp;quot;, min_authors, &amp;quot;авторами:&amp;quot;, nrow(pages_with_coauthors), &amp;quot;\n&amp;quot;)&lt;br /&gt;
    pct &amp;lt;- ifelse(checked_count &amp;gt; 0, &lt;br /&gt;
                   round(100 * nrow(pages_with_coauthors) / checked_count, 1),&lt;br /&gt;
                   0)&lt;br /&gt;
    cat(&amp;quot;Процент совместных страниц:&amp;quot;, pct, &amp;quot;%\n\n&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return(pages_with_coauthors)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# МОДУЛЬ 2: ПОЛУЧЕНИЕ CONTRIBUTORS ДЛЯ ОТОБРАННЫХ СТРАНИЦ&lt;br /&gt;
# ============================================&lt;br /&gt;
&lt;br /&gt;
get_contributors_for_pages &amp;lt;- function(base_url,&lt;br /&gt;
                                       pages_df,&lt;br /&gt;
                                       batch_size = 10,&lt;br /&gt;
                                       delay = DEFAULT_DELAY,&lt;br /&gt;
                                       verbose = TRUE) {&lt;br /&gt;
  &lt;br /&gt;
  if (verbose) {&lt;br /&gt;
    cat(&amp;quot;\n╔════════════════════════════════════════════════╗\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;║  📚 ПОЛУЧЕНИЕ ДЕТАЛЕЙ CONTRIBUTORS          ║\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;╚════════════════════════════════════════════════╝\n\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;Страниц для обработки:&amp;quot;, nrow(pages_df), &amp;quot;\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;Batch size:&amp;quot;, batch_size, &amp;quot;\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;Ожидаемых батчей:&amp;quot;, ceiling(nrow(pages_df) / batch_size), &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  all_contributors &amp;lt;- tibble()&lt;br /&gt;
  n_batches &amp;lt;- ceiling(nrow(pages_df) / batch_size)&lt;br /&gt;
  &lt;br /&gt;
  for (batch_num in 1:n_batches) {&lt;br /&gt;
    &lt;br /&gt;
    start_idx &amp;lt;- (batch_num - 1) * batch_size + 1&lt;br /&gt;
    end_idx &amp;lt;- min(batch_num * batch_size, nrow(pages_df))&lt;br /&gt;
    &lt;br /&gt;
    batch_pages &amp;lt;- pages_df[start_idx:end_idx, ]&lt;br /&gt;
    &lt;br /&gt;
    if (verbose) {&lt;br /&gt;
      cat(&amp;quot;[&amp;quot;, batch_num, &amp;quot;/&amp;quot;, n_batches, &amp;quot;] Страницы &amp;quot;,&lt;br /&gt;
          start_idx, &amp;quot;-&amp;quot;, end_idx, &amp;quot; ... &amp;quot;, sep = &amp;quot;&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    # Подготавливаем titles&lt;br /&gt;
    titles_param &amp;lt;- paste(batch_pages$page_title, collapse = &amp;quot;|&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # Запрос к API&lt;br /&gt;
    params &amp;lt;- list(&lt;br /&gt;
      action = &amp;quot;query&amp;quot;,&lt;br /&gt;
      prop = &amp;quot;contributors&amp;quot;,&lt;br /&gt;
      titles = titles_param,&lt;br /&gt;
      pcexcludegroup = &amp;quot;widgeteditor&amp;quot;,&lt;br /&gt;
      formatversion = &amp;quot;2&amp;quot;,&lt;br /&gt;
      format = &amp;quot;json&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
    &lt;br /&gt;
    data &amp;lt;- safe_get(url = base_url, params = params, verbose = FALSE)&lt;br /&gt;
    batch_contributors &amp;lt;- tibble()&lt;br /&gt;
    &lt;br /&gt;
    if (!is.null(data) &amp;amp;&amp;amp; !is.null(data$query$pages)) {&lt;br /&gt;
      &lt;br /&gt;
      pages_from_api &amp;lt;- data$query$pages&lt;br /&gt;
      &lt;br /&gt;
      if (is.data.frame(pages_from_api)) {&lt;br /&gt;
        pages_list &amp;lt;- list(pages_from_api)&lt;br /&gt;
      } else if (is.list(pages_from_api)) {&lt;br /&gt;
        pages_list &amp;lt;- pages_from_api&lt;br /&gt;
      } else {&lt;br /&gt;
        pages_list &amp;lt;- NULL&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      # Обрабатываем все страницы&lt;br /&gt;
      if (!is.null(pages_list)) {&lt;br /&gt;
        &lt;br /&gt;
        for (page_idx in seq_along(pages_list)) {&lt;br /&gt;
          &lt;br /&gt;
          api_page &amp;lt;- pages_list[[page_idx]]&lt;br /&gt;
          if (is.null(api_page)) next&lt;br /&gt;
          &lt;br /&gt;
          api_title &amp;lt;- as.character(api_page$title)&lt;br /&gt;
          api_pageid &amp;lt;- as.numeric(api_page$pageid)&lt;br /&gt;
          &lt;br /&gt;
          # Ищем соответствие в batch_pages&lt;br /&gt;
          matching_idx &amp;lt;- which(batch_pages$page_title == api_title)&lt;br /&gt;
          &lt;br /&gt;
          if (length(matching_idx) == 0) {&lt;br /&gt;
            matching_idx &amp;lt;- which(&lt;br /&gt;
              trimws(tolower(batch_pages$page_title)) == &lt;br /&gt;
              trimws(tolower(api_title))&lt;br /&gt;
            )&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          if (length(matching_idx) &amp;gt; 0) {&lt;br /&gt;
            logical_pageid &amp;lt;- batch_pages$pageid[matching_idx[1]]&lt;br /&gt;
            logical_title &amp;lt;- batch_pages$page_title[matching_idx[1]]&lt;br /&gt;
          } else {&lt;br /&gt;
            logical_pageid &amp;lt;- api_pageid&lt;br /&gt;
            logical_title &amp;lt;- api_title&lt;br /&gt;
          }&lt;br /&gt;
          &lt;br /&gt;
          # Извлекаем contributors&lt;br /&gt;
          contributors_col &amp;lt;- api_page$contributors&lt;br /&gt;
          &lt;br /&gt;
          if (!is.null(contributors_col)) {&lt;br /&gt;
            &lt;br /&gt;
            if (is.data.frame(contributors_col)) {&lt;br /&gt;
              contribs_df &amp;lt;- contributors_col&lt;br /&gt;
            } else if (is.list(contributors_col) &amp;amp;&amp;amp; length(contributors_col) &amp;gt; 0) {&lt;br /&gt;
              tryCatch({&lt;br /&gt;
                contribs_df &amp;lt;- bind_rows(contributors_col)&lt;br /&gt;
              }, error = function(e) {&lt;br /&gt;
                contribs_df &amp;lt;&amp;lt;- as.data.frame(&lt;br /&gt;
                  do.call(rbind, contributors_col), &lt;br /&gt;
                  stringsAsFactors = FALSE&lt;br /&gt;
                )&lt;br /&gt;
              })&lt;br /&gt;
            } else {&lt;br /&gt;
              contribs_df &amp;lt;- NULL&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            if (!is.null(contribs_df) &amp;amp;&amp;amp; nrow(contribs_df) &amp;gt; 0) {&lt;br /&gt;
              &lt;br /&gt;
              if (!(&amp;quot;userid&amp;quot; %in% names(contribs_df)) || &lt;br /&gt;
                  !(&amp;quot;name&amp;quot; %in% names(contribs_df))) {&lt;br /&gt;
                next&lt;br /&gt;
              }&lt;br /&gt;
              &lt;br /&gt;
              page_contribs &amp;lt;- contribs_df %&amp;gt;%&lt;br /&gt;
                as_tibble() %&amp;gt;%&lt;br /&gt;
                select(userid, name) %&amp;gt;%&lt;br /&gt;
                filter(!is.na(.data$userid), &lt;br /&gt;
                       !is.na(.data$name),&lt;br /&gt;
                       .data$name != &amp;quot;&amp;quot;) %&amp;gt;%&lt;br /&gt;
                mutate(&lt;br /&gt;
                  author_id = as.numeric(.data$userid),&lt;br /&gt;
                  author_name = as.character(.data$name)&lt;br /&gt;
                ) %&amp;gt;%&lt;br /&gt;
                select(author_id, author_name) %&amp;gt;%&lt;br /&gt;
                mutate(&lt;br /&gt;
                  pageid = logical_pageid,&lt;br /&gt;
                  page_title = logical_title&lt;br /&gt;
                ) %&amp;gt;%&lt;br /&gt;
                select(author_id, author_name, pageid, page_title)&lt;br /&gt;
              &lt;br /&gt;
              batch_contributors &amp;lt;- bind_rows(batch_contributors, page_contribs)&lt;br /&gt;
            }&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      if (verbose) {&lt;br /&gt;
        unique_pages &amp;lt;- n_distinct(batch_contributors$pageid)&lt;br /&gt;
        unique_authors &amp;lt;- n_distinct(batch_contributors$author_id)&lt;br /&gt;
        cat(&amp;quot;✓ &amp;quot;, nrow(batch_contributors), &amp;quot; связей&amp;quot;, sep = &amp;quot;&amp;quot;)&lt;br /&gt;
        if (nrow(batch_contributors) &amp;gt; 0) {&lt;br /&gt;
          cat(&amp;quot; (&amp;quot;, unique_authors, &amp;quot; авторов, &amp;quot;, unique_pages, &amp;quot; стр)\n&amp;quot;, sep = &amp;quot;&amp;quot;)&lt;br /&gt;
        } else {&lt;br /&gt;
          cat(&amp;quot;\n&amp;quot;)&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    } else if (verbose) {&lt;br /&gt;
      cat(&amp;quot;✗ ошибка API\n&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    all_contributors &amp;lt;- bind_rows(all_contributors, batch_contributors)&lt;br /&gt;
    Sys.sleep(delay)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  # Финальная обработка&lt;br /&gt;
  if (verbose) {&lt;br /&gt;
    cat(&amp;quot;\n🔄 ФИНАЛЬНАЯ ОБРАБОТКА:\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;─────────────────────────────────────\n&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  all_contributors_clean &amp;lt;- all_contributors %&amp;gt;%&lt;br /&gt;
    distinct(author_id, pageid, .keep_all = TRUE) %&amp;gt;%&lt;br /&gt;
    arrange(pageid, author_id)&lt;br /&gt;
  &lt;br /&gt;
  if (verbose) {&lt;br /&gt;
    cat(&amp;quot;✓ Дубли удалены\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;  Итого связей:&amp;quot;, nrow(all_contributors_clean), &amp;quot;\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;  Уникальных авторов:&amp;quot;, n_distinct(all_contributors_clean$author_id), &amp;quot;\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;  Уникальных страниц:&amp;quot;, n_distinct(all_contributors_clean$pageid), &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return(all_contributors_clean)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# МОДУЛЬ 3: СРАВНИТЕЛЬНЫЙ АНАЛИЗ&lt;br /&gt;
# ============================================&lt;br /&gt;
&lt;br /&gt;
compare_scratch_wikis &amp;lt;- function(wikis_list = SCRATCH_WIKIS,&lt;br /&gt;
                                  max_pages = 300,&lt;br /&gt;
                                  verbose = TRUE) {&lt;br /&gt;
  &lt;br /&gt;
  if (verbose) {&lt;br /&gt;
    cat(&amp;quot;\n\n&amp;quot;)&lt;br /&gt;
    cat(strrep(&amp;quot;═&amp;quot;, 60), &amp;quot;\n&amp;quot;)&lt;br /&gt;
    cat(&amp;quot;🌍 СРАВНИТЕЛЬНЫЙ АНАЛИЗ SCRATCH WIKI НА РАЗНЫХ ЯЗЫКАХ\n&amp;quot;)&lt;br /&gt;
    cat(strrep(&amp;quot;═&amp;quot;, 60), &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  results &amp;lt;- list()&lt;br /&gt;
  &lt;br /&gt;
  for (lang in names(wikis_list)) {&lt;br /&gt;
    &lt;br /&gt;
    base_url &amp;lt;- wikis_list[[lang]]&lt;br /&gt;
    &lt;br /&gt;
    if (verbose) {&lt;br /&gt;
      cat(&amp;quot;\n&amp;quot;, strrep(&amp;quot;─&amp;quot;, 60), &amp;quot;\n&amp;quot;)&lt;br /&gt;
      cat(&amp;quot;🌐 ЯЗЫК:&amp;quot;, toupper(lang), &amp;quot;\n&amp;quot;)&lt;br /&gt;
      cat(strrep(&amp;quot;─&amp;quot;, 60), &amp;quot;\n&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    # 1. Получаем страницы с соавторством&lt;br /&gt;
    pages_coauth &amp;lt;- get_all_pages_with_coauthors(&lt;br /&gt;
      base_url = base_url,&lt;br /&gt;
      max_pages = max_pages,&lt;br /&gt;
      delay = 1,&lt;br /&gt;
      verbose = verbose&lt;br /&gt;
    )&lt;br /&gt;
    &lt;br /&gt;
    if (nrow(pages_coauth) == 0) {&lt;br /&gt;
      if (verbose) cat(&amp;quot;⚠️ Нет данных для языка&amp;quot;, lang, &amp;quot;\n&amp;quot;)&lt;br /&gt;
      results[[lang]] &amp;lt;- NULL&lt;br /&gt;
      next&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    # 2. Получаем детали contributors&lt;br /&gt;
    contributors &amp;lt;- get_contributors_for_pages(&lt;br /&gt;
      base_url = base_url,&lt;br /&gt;
      pages_df = pages_coauth,&lt;br /&gt;
      batch_size = 8,&lt;br /&gt;
      delay = 1,&lt;br /&gt;
      verbose = verbose&lt;br /&gt;
    )&lt;br /&gt;
    &lt;br /&gt;
    # 3. Вычисляем статистику&lt;br /&gt;
    stats &amp;lt;- contributors %&amp;gt;%&lt;br /&gt;
      group_by(pageid, page_title) %&amp;gt;%&lt;br /&gt;
      summarise(&lt;br /&gt;
        n_authors = n_distinct(author_id),&lt;br /&gt;
        n_edits = n(),&lt;br /&gt;
        .groups = &amp;quot;drop&amp;quot;&lt;br /&gt;
      )&lt;br /&gt;
    &lt;br /&gt;
    results[[lang]] &amp;lt;- list(&lt;br /&gt;
      pages = pages_coauth,&lt;br /&gt;
      contributors = contributors,&lt;br /&gt;
      stats = stats&lt;br /&gt;
    )&lt;br /&gt;
    &lt;br /&gt;
    Sys.sleep(2)&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  return(results)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# МОДУЛЬ 4: ВИЗУАЛИЗАЦИЯ СРАВНЕНИЯ&lt;br /&gt;
# ============================================&lt;br /&gt;
&lt;br /&gt;
print_comparison_summary &amp;lt;- function(results) {&lt;br /&gt;
  &lt;br /&gt;
  cat(&amp;quot;\n\n&amp;quot;)&lt;br /&gt;
  cat(strrep(&amp;quot;═&amp;quot;, 80), &amp;quot;\n&amp;quot;)&lt;br /&gt;
  cat(&amp;quot;📊 СВОДНАЯ ТАБЛИЦА: СРАВНЕНИЕ SCRATCH WIKI ПО ЯЗЫКАМ\n&amp;quot;)&lt;br /&gt;
  cat(strrep(&amp;quot;═&amp;quot;, 80), &amp;quot;\n\n&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  summary_table &amp;lt;- tibble()&lt;br /&gt;
  &lt;br /&gt;
  for (lang in names(results)) {&lt;br /&gt;
    &lt;br /&gt;
    if (is.null(results[[lang]])) next&lt;br /&gt;
    &lt;br /&gt;
    pages &amp;lt;- results[[lang]]$pages&lt;br /&gt;
    contrib &amp;lt;- results[[lang]]$contributors&lt;br /&gt;
    stats &amp;lt;- results[[lang]]$stats&lt;br /&gt;
    &lt;br /&gt;
    summary_table &amp;lt;- bind_rows(&lt;br /&gt;
      summary_table,&lt;br /&gt;
      tibble(&lt;br /&gt;
        Language = toupper(lang),&lt;br /&gt;
        &amp;quot;Pages (all)&amp;quot; = nrow(pages),&lt;br /&gt;
        &amp;quot;Pages (≥2 authors)&amp;quot; = nrow(pages),&lt;br /&gt;
        &amp;quot;Total authors&amp;quot; = n_distinct(contrib$author_id),&lt;br /&gt;
        &amp;quot;Total links&amp;quot; = nrow(contrib),&lt;br /&gt;
        &amp;quot;Avg authors/page&amp;quot; = round(mean(stats$n_authors), 2),&lt;br /&gt;
        &amp;quot;Max authors/page&amp;quot; = max(stats$n_authors)&lt;br /&gt;
      )&lt;br /&gt;
    )&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  print(summary_table)&lt;br /&gt;
  &lt;br /&gt;
  cat(&amp;quot;\n&amp;quot;)&lt;br /&gt;
  cat(&amp;quot;Пояснения:\n&amp;quot;)&lt;br /&gt;
  cat(&amp;quot;- Pages (all): Проверено страниц\n&amp;quot;)&lt;br /&gt;
  cat(&amp;quot;- Pages (≥2 authors): Найдено со совместным редактированием\n&amp;quot;)&lt;br /&gt;
  cat(&amp;quot;- Total authors: Всего уникальных авторов\n&amp;quot;)&lt;br /&gt;
  cat(&amp;quot;- Total links: Связей (автор-страница)\n&amp;quot;)&lt;br /&gt;
  cat(&amp;quot;- Avg authors/page: Средний размер группы авторов\n&amp;quot;)&lt;br /&gt;
  cat(&amp;quot;- Max authors/page: Максимальное количество авторов на странице\n\n&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# ============================================&lt;br /&gt;
# БЫСТРЫЙ СТАРТ: &lt;br /&gt;
# ============================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pages_en &amp;lt;- get_all_pages_with_coauthors(SCRATCH_WIKIS$en, max_pages = 200)&lt;br /&gt;
contrib_en &amp;lt;- get_contributors_for_pages(SCRATCH_WIKIS$en, pages_en)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Lesson]]&lt;/div&gt;</summary>
		<author><name>Patarakin</name></author>
	</entry>
</feed>