Herkese hayırlı geceler bugün sizlere C# üzerinde telegram bot kullanımını göstereceğim, bunun sade hali de var ancak kütüphaneye dökülmüş Nuget halini de kullanabilirsiniz zira kodlar aynı sadece arttırmamak adına Nuget olarak eklerseniz hafiflemiş olursunuz. Bu serimizin ilk serisi ikinci serisinde web hook olarak mesaj atacağız bu konumuzda ise telegram üzerinden botumuza yazdığımız mesajı C# formumuz alacak & arkada API kullanarak kullanıcı adını yazdığımız kişinin hikayelerini gönderecek. Aslında örnek bir video bırakacağım lakin videonun üzerinden 2 yıl geçtiği için kullanılan yöntemler maalesef ki işe yaramamakta bu yüzden sıfırdan API bulmam gerekti ikinci bir sorun ise response olayında dönen parse işlemi ben de çorba olduğu için yapay zeka yardımı almak zorunda kaldım kodları da değiştirdi zaten kodlama içerisinde fark edeceksiniz. Konumuza geçmeden önce aşağıya esinlendiğim kaynakları gösteren bir video bırakıyorum detayları orada da görebilrisiniz.
using System;using System.Linq;using System.Net.Http;using System.Net.Http.Headers;using System.Text;using System.Text.Json;using System.Threading;using System.Threading.Tasks;using Telegram.Bot;using Telegram.Bot.Types;using Telegram.Bot.Types.Enums;using TelegramInstagram;Daha sonra formumuz donmaması adına asenkron başlığı altında kodlarımızı girelim;
C#:
static async Task Main()
{
var cts = new CancellationTokenSource();
var bot = new TelegramBotClient(
"TELEGRAM BOT TOKEN",
cancellationToken: cts.Token
);
var me = await bot.GetMe();
Console.WriteLine($"@{me.Username} çalışıyor");
bot.OnMessage += (msg, type) => OnMessage(bot, msg, type);
Console.ReadLine();
cts.Cancel();
}
static async Task OnMessage(
ITelegramBotClient bot,
Message msg,
UpdateType type)
{
if (msg.Type != MessageType.Text)
return;
string username = msg.Text.Trim();
if (string.IsNullOrEmpty(username))
{
await bot.SendMessage(msg.Chat.Id, "Instagram kullanıcı adı gönder.");
return;
}
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(
Encoding.UTF8.GetBytes("TEN API KULLANICI ADI:TEN API ŞİFRE")
)
);
var profileContent = new StringContent(
JsonSerializer.Serialize(new { username }),
Encoding.UTF8,
"application/json"
);
var profileResponse = await client.PostAsync(
"https://tenapi.net/api/instagram/user/get_web_profile_info",
profileContent
);
var profileJson = await profileResponse.Content.ReadAsStringAsync();
using var doc = JsonDocument.Parse(profileJson);
if (!(
doc.RootElement.TryGetProperty("response", out var resp) &&
resp.TryGetProperty("body", out var body) &&
body.TryGetProperty("data", out var data) &&
data.TryGetProperty("user", out var user) &&
user.TryGetProperty("id", out var idEl)
))
{
await bot.SendMessage(msg.Chat.Id, "Instagram ID bulunamadı.");
return;
}
string userId = idEl.GetString();
await bot.SendMessage(
msg.Chat.Id,
$"👤 Kullanıcı: {username}\n🆔 Instagram ID: `{userId}`",
parseMode: ParseMode.Markdown
);
var storyRequest = new HttpRequestMessage(
HttpMethod.Post,
"https://tenapi.net/api/instagram/user/get_stories"
);
storyRequest.Headers.Authorization =
new AuthenticationHeaderValue(
"Basic",
Convert.ToBase64String(
Encoding.UTF8.GetBytes("TEN API KULLANICI ADI:ŞİFRENİZ")
)
);
storyRequest.Content = new StringContent(
JsonSerializer.Serialize(new
{
ids = new[] { userId }
}),
Encoding.UTF8,
"application/json"
);
try
{
var storyResponse = await client.SendAsync(storyRequest);
var storyJson = await storyResponse.Content.ReadAsStringAsync();
var root = JsonSerializer.Deserialize<Root>(storyJson);
if (root?.response?.body?.reels == null ||
root.response.body.reels.Count == 0)
{
await bot.SendMessage(msg.Chat.Id, "Story bulunamadı.");
return;
}
foreach (var reelPair in root.response.body.reels)
{
var reel = reelPair.Value;
foreach (var item in reel.items)
{
var video = item.video_versions?.FirstOrDefault();
var image = item.image_versions2?.candidates?.FirstOrDefault();
if (video != null)
{
await bot.SendVideo(
msg.Chat.Id,
video.url,
supportsStreaming: true
);
}
else if (image != null)
{
await bot.SendPhoto(
msg.Chat.Id,
image.url
);
}
}
}
}
catch (Exception ex)
{
await bot.SendMessage(
msg.Chat.Id,
"Hata: " + ex.Message
);
}
}
Şimdi ise bir class ögesi ekleyerek içerisine API 'nin gelen cevabından verileri ayrıştırmak için gelen verileri tanıtacağız. Adını videoda yer alan ad gibi yapabilirsiniz. Şahsen öyle yaptım.
C#:
using System.Collections.Generic;
namespace TelegramInstagram
{
public class Root
{
public string status { get; set; }
public Response response { get; set; }
}
public class Response
{
public Body body { get; set; }
}
public class Body
{
public Dictionary<string, ReelUser> reels { get; set; }
}
public class ReelUser
{
public List<Item> items { get; set; }
}
public class Item
{
public ImageVersions2 image_versions2 { get; set; }
public List<VideoVersion> video_versions { get; set; }
}
public class ImageVersions2
{
public List<Candidate> candidates { get; set; }
}
public class Candidate
{
public string url { get; set; }
}
public class VideoVersion
{
public string url { get; set; }
}
}
Dönen Cevabımıza Bakalım; Zafer Alagöz 'ün Hikayelerini Çekelim
Teşekkürler
Teşekkürler
Son düzenleme:





