Викии Вики
Викии Вики

Logo-csharp.png

C Sharp (чаще C#, также C♯[1]) — язык программирования, разработанный в компании Microsoft. Является одним из языков программирования, который используется для работы с ботами.

Характеристика

C# является объектно-ориентированным языком программирования и относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Переняв многое от своих предшественников — языков C++, Pascal, Модула, Smalltalk и в особенности Java, С# при этом отказывается от некоторых проблематичных моделей (нельзя использовать множественное наследование классов, которое может привести к семантической неопределённости).

На данный момент актуальная версия языка — C# 7.0, но в рамках рассматриваемого ниже программного обеспечения используется более старая версия — C# 3.0.

Plus.png Плюсы:
  • Невысокий порог вхождения: для новичков данный язык программирования является одним из самых перспективных.
  • Большое количество «синтаксического сахара» — конструкций, которые созданы для облегчения написания и понимания кода.
  • Присутствует возможность работать с памятью напрямую (что, впрочем, может быть и минусом).
  • Высокая популярность языка и большое сообщество разработчиков.

Minus.png Минусы:

  • C# ориентирован в основном на .NET-платформу, а значит — операционные системы Windows.
  • Присутствует оператор GOTO, использование которого считается дурным тоном, так как может приводить к серьёзному усложнению понимания кода (вплоть до того, что провести анализ кода становится практически невозможно).
  • C# проигрывает в производительности своим предшественникам — C и C++.

Синтаксис языка является достаточно простым в освоении. Классический пример программы с Hello, world! может выглядеть так:

using System;

namespace Example
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("Hello World!"); // Вывод заданного текста в консоль
            Console.ReadKey(); // Ожидание нажатия клавиши пользователем
        }
    }
}

Использование

С использованием данного языка программирования было написано следующее программное обеспечение:

  • AutoWikiBrowser — одна из самых известных программ для ботов, также поддерживает дополнительные модули и плагины на C#.
  • DotNetWikiBot — фреймворк для работы MediaWiki-проектами.

AutoWikiBrowser

Как уже было сказано ранее, программа написана на языке программирования C# с использованием .NET Framework 3.5 (который необходим для работы приложения).

В AutoWikiBrowser’е используются следующие библиотеки (набор классов, содержащих определённый код):

  • WikiFunctions — библиотека, содержащая большое количество разнообразных классов. Содержит в себе обширный функционал для самых разных моментов при работе с программой — методы для входа в аккаунт, генерация списков, форматирование текста для дальнейшей работы и многое другое.
  • Newtonsoft.JSON — библиотека, предназначенная для формирования JSON (текстовый формат обмена данными, основанный на JavaScript) и дальнейшей работы с ним, например его преобразования или валидации.

Плагины

AutoWikiBrowser позволяет загружать дополнительные плагины, которые дают новые возможности при использовании программы. При скачивании последней версии AWB из официального репозитория[2] в отдельной папке уже есть несколько плагинов. Для того чтобы их использовать, нужно или поместить их в папку, где осуществляется запуск AWB, либо же через приложение выбрать нужные для загрузки плагины.

Пример модуля в AutoWikiBrowser

При необходимости участник может сам написать необходимый ему плагин. Для этого участнику понадобится среда разработки, которая поддерживает C# (например Visual Studio), а также библиотека WikiFunctions. Подробную инструкцию можно найти здесь.

Модули

Если оператору бота необходимо реализовать свой способ обработки статей, он может использовать модули. Оператору необходимо написать свой код (на языке C# 3.5 или VB .NET 2.0), который будет по-своему изменять текст статьи. По умолчанию модуль содержит следующий код:

    public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
    {
        Skip = false;
        Summary = "test";
        ArticleText = "test \r\n\r\n" + ArticleText;
        return ArticleText;
    }

Ключевым в данном коде является метод ProcessArticle, на вход которому подаётся текст статьи (ArticleText), её название (ArticleTitle), номер пространства имён (wikiNamespace). Внутри метода мы можем задать описание правки (используя параметр Summary) и указать, нужно ли пропустить данную статью, или нет (используя параметр Skip). В результате работы будет сформирован новый текст статьи на основе старого (в примере выше в самом начале будет добавлено слово test и два переноса строки) и передан на последующие этапы обработки.

DotNetWikiBot

Dotnetwikibot.png

DotNetWikiBot — фреймворк, позволяющий помочь со многими сложными и рутинными задачами разработки и обслуживания сайтов вики. Он также написан на C#, но, в отличие от AutoWikiBrowser, не является полноценным приложением.

После скачивания DotNetWikiBot’a в папке находятся несколько интересующих нас файлов с кодом на C#:

  • BotScript.cs — файл, который содержит в себе код для непосредственного запуска работы бота;
  • DotNetWikiBot.cs — содержит в себе исходный код фреймворка. В случае необходимости это позволяет собрать заново библиотеку DotNetWikiBot.dll и использовать её так, как захочет автор изменений;
  • BatchFileUploader.cs — файл, который содержит в себе код для работы BatchFileUploader.exe — приложения для загрузки файлов.

Для того чтобы осуществить запуск бота, нужно изменить файл BotScript.cs, а затем запустить скрипт Compile & Run.bat (если используется Mono, то нужно запустить Compile & Run (Mono).bat).

В самом простом случае код в BotScript.cs выглядит так:

using DotNetWikiBot;

class MyBot : Bot
{
    public static void Main()
    {
        Site enWiki = new Site("http://en.wikipedia.org", "myBotLogin", "myPassword");
        Page p = new Page(enWiki, "Art");
        p.Load();
        p.AddToCategory("Visual arts");
        p.Save("comment: category link added", true);	
    }
}

В DotNetWikiBot используются три новых типа данных: Site (для адреса википроекта и данных бота), Page (для отдельной страницы вики) и PageList (для списка страниц).

Рассмотрим подробнее метод Main:

  • Сначала указывается адрес википроекта, где мы будем осуществлять правки, а затем вводятся логин и пароль от аккаунта бота.
  • Создаётся новый объект с типом Page, а также указывается адрес и название страницы.
  • Происходит загрузка информации о странице.
  • Идёт добавление категории.
  • После этого страница сохраняется на википроекте (в описании правки будет добавлен комментарий).

Более подробную документацию и примеры использования можно найти в репозитории, где есть отдельный тестовый класс для проверки функций DotNetWikiBot.

Интересные факты

Нота C#

  • Название «Си шарп» (от англ. sharp — диез) происходит от буквенной музыкальной нотации, где латинской букве C соответствует нота До, а знак диез (англ. sharp) означает повышение соответствующего ноте звука на полутон. Название также является отсылкой к цепочке C — C++ — C++++(C#), так как символ «#» можно представить состоящим из 4 знаков «+».
  • Для написания кода AutoWikiBrowser использовалась среда разработки Microsoft Visual C# Express Edition, которая доступна для бесплатного скачивания и имеет ограниченный функционал по сравнению с платной версией.
  • И в AutoWikiBrowser, и в DotNetWikiBot используется .NET Framework 3.5. Это позволяет использовать не только C#, но и другие .NET-языки — модули в AutoWikiBrowser можно также писать на VB.NET 2.0, а для использования DotNetWikiBot можно использовать ещё и Managed C++, JScript, J#, F#.

Примечания

  1. В заголовке статьи значится C Sharp, а не C#, поскольку технические возможности движка MediaWiki не позволяют создать страницу с октоторпом в названии. Вариант C♯, несмотря на то что слово sharp указывает именно на диез, в профессиональном жаргоне встречается редко.
  2. Репозиторий AutoWikiBrowser