O
O
old_mamont2016-12-06 14:58:45
API
old_mamont, 2016-12-06 14:58:45

How to start learning C# to develop software for social networks and further work with the API of these social networks?

Greetings.
I understand the basics of programming. I have an idea.
I want to start learning C# for specific purposes, or to be more precise, developing software for social networks and working with the API of these social networks.
I would be happy with useful links, video courses and books specifically for these purposes.
Thanks in advance.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Alexey Nemiro, 2016-12-06
@AlekseyNemiro

Working with APIs is just web requests.
Preparing requests and processing responses is mostly serialization / deserialization, mostly JSON data, less often XML .
Everything else will depend on the type of applications you plan to develop.
It is better to read the official documentation for working with the social networking API .
I have a library for OAuth authorization (used by many, if not all, social networks), which, among other things, has unified mechanisms for working with the API . You can see how the library works at the following link: demo-oauth.nemiro.net
For many large projects (websites), you can find ready-made narrow-profile solutions.
Below is a small example of using the Nemiro.OAuth library in a Windows Forms project to authenticate with Instagram and use the resulting access token to load a list of the current user's latest images. Images are loaded into an ImageList and then displayed in a ListView :

using System;
using System.Drawing;
using System.Net.Http;
using System.Windows.Forms;
using Nemiro.OAuth;
using Nemiro.OAuth.LoginForms;

namespace InstagramWinForms
{

  public partial class Form1 : Form
  {

    // базовый адрес API
    private const string API_BASE_URL = "https://api.instagram.com/v1";

    // элемент для хранения полученных изображений
    private ImageList ImageList = new ImageList();

    // элемент для вывода изображений
    private ListView ListView1 = new ListView();

    private string AccessToken;

    public Form1()
    {
      InitializeComponent();

      // размер изображений 150x150px, 16bit
      this.ImageList.ImageSize = new Size(150, 150);
      this.ImageList.ColorDepth = ColorDepth.Depth16Bit;

      // настраиваем список для вывода
      this.ListView1.View = View.LargeIcon;
      this.ListView1.LargeImageList = this.ImageList;

      this.ListView1.Dock = DockStyle.Fill;

      // добавляем список на форму
      this.Controls.Add(this.ListView1);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      // запрос на получение маркера доступа
      this.GetAccessToken();
    }

    private void GetAccessToken()
    {
      // создаем форму для Instagram
      // ВНИМАНИЕ: используйте собственный идентификатор и ключ
      // получить идентификатор и ключ можно на сайте instagram:
      // https://www.instagram.com/developer/clients/manage/
      var login = new InstagramLogin
      (
        // client id вашего приложения
        "9fcad1f7740b4b66ba9a0357eb9b7dda", 
        // client key вашего приложения
        "3f04cbf48f194739a10d4911c93dcece", 
        // требуется адрес возврата, 
        // можно использовать указанный, 
        // но лучше сделать свой
        "http://oauthproxy.nemiro.net/",
        // права доступа
        // https://www.instagram.com/developer/authorization/
        // для public_content (и возможно других) убедитесь, 
        // что в настройках приложения (на сайте instagram) 
        // в разделе Permissions нет никаких требований 
        // (если требования есть, то чтобы все работало, 
        // нужно их удовлетворить :-) ...)
        scope: "basic public_content",
        // требуем получить данные профиля пользователя
        loadUserInfo: true
      );

      // привязываем форму авторизации к текущей форме
      login.Owner = this;

      // показываем форму
      login.ShowDialog();

      if (login.IsSuccessfully)
      {
        // все прошло успешно, запоминаем маркер доступа
        this.AccessToken = login.AccessToken.Value;

        // выводим в заголовок текущей формы имя пользователя
        this.Text = (login.UserInfo.DisplayName ?? login.UserInfo.UserName);

        // получаем изображения
        this.GetRecentMedia();
      }
      else
      {
        MessageBox.Show("Error...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
      }
    }

    private void GetRecentMedia()
    {
      // отправляем запрос на получение изображений
      OAuthUtility.GetAsync
      (
        String.Format
        (
          "{0}/users/self/media/recent?access_token={1}", 
          API_BASE_URL, 
          this.AccessToken
        ),
        // результат запроса будет передан в метод GetRecentMedia_Result
        callback: GetRecentMedia_Result
      );
    }

    private async void GetRecentMedia_Result(RequestResult result)
    {
      if (result.StatusCode == 200)
      {
        // получили успешный ответ
        // обрабатываем его
        foreach (UniValue item in result["data"])
        {
          // загружаем текущую картинку
          using (var client = new HttpClient())
          {
            var s = await client.GetStreamAsync(item["images"]["thumbnail"]["url"].ToString());

            // добавляем изображение в список
            Invoke(new Action(() => this.ImageList.Images.Add(Image.FromStream(s))));
          }

          // создаем элемент для вывода в список 
          var image = new ListViewItem();
          // название изображения
          image.Text = item["caption"]["text"].ToString();
          // индекс изображения в списке (ImageList)
          image.ImageIndex = this.ImageList.Images.Count - 1;

          // добавляем элемент в список
          Invoke(new Action(() => this.ListView1.Items.Add(image)));
        }
      }
      else
      {
        this.ShowError(result);
      }
    }

    private void ShowError(RequestResult result)
    {
      if (result["meta"]["error_message"].HasValue)
      {
        MessageBox.Show
        (
          result["meta"]["error_message"].ToString(), 
          "Error", 
          MessageBoxButtons.OK, 
          MessageBoxIcon.Error
        );
      }
      else
      {
        MessageBox.Show
        (
          result.ToString(), 
          "Error", 
          MessageBoxButtons.OK, 
          MessageBoxIcon.Error
        );
      }
    }

    private void button1_Click(object sender, EventArgs e)
    {
      this.GetRecentMedia();
    }

  }

}

The project code can be found at the following link:
https://github.com/alekseynemiro/nemiro.oauth.dll/...

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question