Answer the question
In order to leave comments, you need to log in
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
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();
}
}
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question