Twitter API v2.0 🐦 এর জন্য এটি হল একটি হালকা এবং ক্রস-প্ল্যাটফর্ম মোড়ক
| English| 日本語 | Français | Tiếng Việt | বাংলা | Español | Deutsch | Português | 简体中文 |
- 1. নির্দেশনা 🌎
এই লাইব্রেরী Dart এবং Flutter অ্যাপ্স এ Twitter API v2.0 ব্যবহার করতে সহজতম পদ্ধতি প্রদান করে।
আপনাদের ❤️ এবং repo তে স্টার দিয়ে প্রোজেক্টটিকে সাহায্য করুন।
Dart এর সাথেঃ
dart pub add twitter_api_v2
অথবা Flutter এর সাথেঃ
flutter pub add twitter_api_v2
import 'package:twitter_api_v2/twitter_api_v2';
Future<void> main() async {
//! https://developer.twitter.com এই লিঙ্ক থেকে আপনার কী এবং টোকেন নিতে হবে।
final twitter = v2.TwitterApi(
//! পূর্বনির্ধারিতভাবে অথেনটিকেশন OAuth2.0 দিয়ে করা আছে।
//!
//! উল্লেখ্য যে এন্ডপয়েন্টস ব্যবহার করতে হলে প্রয়োজন নির্দিষ্ট ইউজার এর অনুমতি।
//! যেমনঃ টুইটস এবং লাইকস। কিন্তু তার জন্য আপনাকে OAuth2.0 PKCE থেকে
//! একটি টোকেন জারি করতে হবে।
bearerToken: 'YOUR_TOKEN_HERE',
//! নয়তো বা আপনি পছন্দমত OAuth2.0 PKCE মেথড এর পরিবর্তে পুরাতন সেই
//! OAuth1.0a মেথড ব্যবহার করবেন। অতঃপর আপনি OAuth1.0a এর টোকেন
//! তৈরি করতে এই নিম্নলিখিত কোড ব্যবহার করতে পারেন।
//!
//! যাইহোক, মনে রাখবেন যে কতিপয় এন্ডপয়েন্টস অথেনটিকেশন এর জন্য
//! OAuth 1.0a মেথড ব্যবহার করা যাবে না।
oauthTokens: v2.OAuthTokens(
consumerKey: 'YOUR_CONSUMER_KEY_HERE',
consumerSecret: 'YOUR_CONSUMER_SECRET_HERE',
accessToken: 'YOUR_ACCESS_TOKEN_HERE',
accessTokenSecret: 'YOUR_ACCESS_TOKEN_SECRET_HERE',
),
);
try {
// অথেনটিকেটেড ইউজার এর প্রোফাইল পেতে হলে।
final me = await twitter.users.lookupMe();
// সার্চ কোয়েরি সম্পৃক্ত টুইটস পেতে হলে।
final tweets = await twitter.tweets.searchRecent(
query: '#ElonMusk',
maxResults: 20,
// আপনি সার্চ রেজাল্ট বৃদ্ধি করতে পারবেন।
expansions: [
v2.TweetExpansion.authorId,
v2.TweetExpansion.inReplyToUserId,
],
tweetFields: [
v2.TweetField.conversationId,
v2.TweetField.publicMetrics,
],
userFields: [
v2.UserField.location,
v2.UserField.verified,
v2.UserField.entities,
v2.UserField.publicMetrics,
],
);
await twitter.tweets.createLike(
userId: me.data.id,
tweetId: tweets.data.first.id,
);
// উচ্চ ক্ষমতা সম্পন্ন ভলিউম স্ট্রীম এন্ডপয়েন্ট পাওয়া যায়।
final sampleStream = await twitter.tweets.connectSampleStream();
await for (final response in sampleStream.stream.handleError(print)) {
print(response);
}
// আরও উচ্চ ক্ষমতা সম্পন্ন ফিল্টার্ড স্ট্রীম এন্ডপয়েন্ট পাওয়া যায়।
await twitter.tweets.createFilteringRules(
rules: [
v2.FilteringRuleParam(value: '#ElonMusk'),
v2.FilteringRuleParam(value: '#Tesla'),
v2.FilteringRuleParam(value: '#SpaceX'),
],
);
final filteredStream = await twitter.tweets.connectFilteredStream();
await for (final response in filteredStream.stream.handleError(print)) {
print(response.data);
print(response.matchingRules);
}
} on TimeoutException catch (e) {
print(e);
} on v2.RateLimitExceededException catch (e) {
print(e)
} on v2.TwitterException catch (e) {
print(e.response.headers);
print(e.body);
print(e);
}
}
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
POST /2/tweets | createTweet |
DELETE /2/tweets/:id | destroyTweet |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
POST /2/users/:id/retweets | createRetweet |
DELETE /2/users/:id/retweets/:source_tweet_id | destroyRetweet |
GET /2/tweets/:id/retweeted_by | lookupRetweetedUsers |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
GET /2/tweets/:id/quote_tweets | lookupQuoteTweets |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
GET /2/tweets/search/all | searchAll |
GET /2/tweets/search/recent | searchRecent |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
GET /2/tweets | lookupByIds |
GET /2/tweets/:id | lookupById |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
GET /2/tweets/counts/all | countAll |
GET /2/tweets/counts/recent | countRecent |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
POST /2/users/:id/bookmarks | createBookmark |
DELETE /2/users/:id/bookmarks/:tweet_id | destroyBookmark |
GET /2/users/:id/bookmarks | lookupBookmarks |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
GET /2/users/:id/mentions | lookupMentions |
GET /2/users/:id/tweets | lookupTweets |
GET /2/users/:id/timelines/reverse_chronological | lookupHomeTimeline |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
PUT /2/tweets/:id/hidden | createHiddenReply |
PUT /2/tweets/:id/hidden | destroyHiddenReply |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
GET /2/tweets/sample/stream | connectSampleStream |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
POST /2/tweets/search/stream/rules | createFilteringRules |
GET /2/tweets/search/stream/rules | lookupFilteringRules |
GET /2/tweets/search/stream | connectFilteredStream |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
GET /2/users | lookupByIds |
GET /2/users/:id | lookupById |
GET /2/users/by | lookupByNames |
GET /2/users/by/username/:username | lookupByName |
GET /2/users/me | lookupMe |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
POST /2/users/:id/muting | createMute |
DELETE /2/users/:source_user_id/muting/:target_user_id | destroyMute |
GET /2/users/:id/muting | lookupMutingUsers |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
POST /2/users/:id/blocking | createBlock |
DELETE /2/users/:source_user_id/blocking/:target_user_id | destroyBlock |
GET /2/users/:id/blocking | lookupBlockingUsers |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
GET /2/spaces/search | search |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
GET /2/lists/:id | lookupById |
GET /2/users/:id/owned_lists | lookupOwnedBy |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
POST /2/users/:id/pinned_lists | createPinnedList |
DELETE /2/users/:id/pinned_lists/:list_id | destroyPinnedList |
GET /2/users/:id/pinned_lists | lookupPinnedLists |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
GET /2/lists/:id/tweets | lookupTweets |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
POST /2/lists | createPublicList |
POST /2/lists | createPrivateList |
DELETE /2/lists/:id | destroyList |
PUT /2/lists/:id | updateListAsPublic |
PUT /2/lists/:id | updateListAsPrivate |
এন্ডপয়েন্ট | মেথডের নাম |
---|---|
POST /2/compliance/jobs | createJob |
GET /2/compliance/jobs | lookupJobs |
GET /2/compliance/jobs/:id | lookupJob |
twitter_api_v2
এন্ডপয়েন্টের বৈশিষ্ট্যের উপর নির্ভর করে নিম্নোল্লেখিত আদর্শ উপসর্গ ব্যবহার করে। সুতরাং আপনি যে এন্ডপয়েন্ট ব্যবহার করতে চান তার অনুরূপ মেথডটি খুঁজে পাওয়া খুবই সহজ!
উপসর্গ | বর্ণনা |
---|---|
lookup | এই উপসর্গটি এন্ডপয়েন্টের সাথে সংযুক্ত থাকে যা উল্লেখ করে টুইটস, ইউজারস প্রভৃতি। |
search | এই উপসর্গটি এন্ডপয়েন্টের সাথে সংযুক্ত থাকে যা ব্যাপক সার্চ সম্পাদন করে। |
connect | এই উপসর্গটি উচ্চ ক্ষমতা সম্পন্ন স্ট্রীমিং সহ এন্ডপয়েন্টের সাথে সংযুক্ত থাকে। |
count | এই উপসর্গটি এন্ডপয়েন্টের সাথে সংযুক্ত থাকে যা একটি নির্দিষ্ট আইটেম গণনা করে। |
create | এই উপসর্গটি এন্ডপয়েন্টের সাথে সংযুক্ত থাকে যা স্টেট ক্রিয়েট করে যেমন টুইট এবং ফলো । |
destroy | এই উপসর্গটি এন্ডপয়েন্টের সাথে সংযুক্ত থাকে যা স্টেট ডেস্ট্রয় করে যেমন টুইট এবং ফলো । |
update | এই উপসর্গটি এন্ডপয়েন্টের সাথে সংযুক্ত থাকে যা স্টেট আপডেট করে। |
twitter_api_v2
আপনার অ্যাপ-অনলি বিয়ারার টোকেন জেনারেট করতে/খুঁজে পেতে ইউটিলিটি প্রদান করে।
import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;
Future<void> main() async {
final bearerToken = await v2.OAuthUtils.generateAppOnlyBearerToken(
consumerKey: 'YOUR_CONSUMER_KEY',
consumerSecret: 'YOUR_CONSUMER_SECRET',
);
print(bearerToken);
}
এই লাইব্রেরীতে, প্যারামিটারগুলো যা রিকোয়েস্ট টাইমে প্রয়োজন হয় না। যেমনঃ অপশনাল প্যারামিটারগুলোকে নাল হিসাবে নির্ধারণ করা হয়। যাইহোক, এই লাইব্রেরী ব্যবহার করার সময় রিকোয়েস্ট পাঠাতে গিয়ে ডেভেলপারদের নাল প্যারামিটার সম্পর্কে জানার প্রয়োজন নেই।
তার অর্থ হল এই যে, যে সমস্ত প্যারামিটারগুলোর মান নাল দিয়ে নির্দিষ্ট করা হয় রিকোয়েস্ট পাঠানোর আগেই সেগুলোকে নিরাপদে সরানো হয় এবং বাতিল করা হয়।
যেমনঃ নাল দিয়ে নির্দিষ্ট করা আর্গুমেন্টগুলোকে নিম্নলিখিত রিকোয়েস্টে বাতিল হিসাবে গণ্য করা হয়।
import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;
Future<void> main() async {
final twitter = v2.TwitterApi(bearerToken: 'YOUR_TOKEN_HERE');
await twitter.tweets.createTweet(
text: 'Hello, World!',
// এই প্যারামিটারগুলো রিকোয়েস্ট পাঠানোর সময় বাতিল হিসাবে গণ্য হয় কারণ তাদের মান হচ্ছে নাল।
mediaIds: null,
expansions: null,
);
}
ধরুন, পরিস্থিতি এমনও হতে পারে যেখানে ডাটাতে শুধুমাত্র একটি ID থাকে, এবং আপনি সেই ID এর সাথে যুক্ত থাকা ডাটা অবজেক্টটিও পুনরুদ্ধার করতে চান। এই ক্ষেত্রে, Twitter API v2.0
স্পেসিফিকেশন যা expansions
নামে পরিচিত তা খুবই দরকারী এবং এই লাইব্রেরী সেই স্পেসিফিকেশনটিকে সমর্থন করে।
মূলত এটি এন্ডপয়েন্টগুলোতে ব্যবহার করা যেতে পারে যা GET কমিউনিকেশন, যেমনঃ lookup
এবং search
প্রক্রিয়াকরণ করে। কতিপয় ফিল্ডগুলো TwitterResponse এর includes
প্রোপারটিতেও অন্তর্ভুক্ত হতে পারে।
আপনি নিম্নলিখিতভাবে expansions
ব্যবহার করতে পারেনঃ
import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;
Future<void> main() async {
final twitter = v2.TwitterApi(bearerToken: 'YOUR_TOKEN_HERE');
try {
final tweets = await twitter.tweets.searchRecent(
query: '#ElonMusk',
// আপনার প্রয়োজনীয় ফিল্ডগুলো নির্দিষ্ট করুন!
expansions: [
v2.TweetExpansion.authorId,
v2.TweetExpansion.inReplyToUserId,
],
);
print(tweets);
} on v2.TwitterException catch (e) {
print(e);
}
}
আরও বিস্তারিত জানতে expansions
সম্পর্কে Official Documentation দেখতে পারেন।
Twitter API v2.0
একটি অত্যন্ত আকর্ষণীয় স্পেসিফিকেশন সমর্থন করে, যা ইউজারদের পরিস্থিতির উপর নির্ভর করে প্রতিটি এন্ডপয়েন্টের জন্য রেসপন্স অবজেক্টে থাকা ডাটার পরিমাণ নিয়ন্ত্রণ করতে দেয়। এটাকে বলা হয় fields
এবং এই লাইব্রেরী এই স্পেসিফিকেশন সমর্থন করে।
মূলত এটি এন্ডপয়েন্টগুলোতে ব্যবহার করা যেতে পারে যা GET কমিউনিকেশন, যেমনঃ lookup
এবং search
প্রক্রিয়াকরণ করে। কতিপয় ফিল্ডগুলো TwitterResponse এর includes
ফিল্ডেও অন্তর্ভুক্ত হতে পারে।
আপনি নিম্নলিখিতভাবে fields
ব্যবহার করতে পারেনঃ
import 'package:twitter_api_v2/twitter_api_v2.dart' as v2;
Future<void> main() async {
final twitter = v2.TwitterApi(bearerToken: 'YOUR_TOKEN_HERE');
try {
final tweets = await twitter.tweets.searchRecent(
query: '#ElonMusk',
maxResults: 20,
expansions: v2.TweetExpansion.values,
tweetFields: [
v2.TweetField.conversationId,
v2.TweetField.publicMetrics,
],
userFields: [
v2.UserField.location,
v2.UserField.publicMetrics,
],
);
print(tweets);
} on v2.TwitterException catch (e) {
print(e);
}
}
বিঃদ্রঃ
কতিপয় ফিল্ডগুলোexpansions
এর সাথে মিল রাখা আবশ্যক।
আরও বিস্তারিত জানতে fields
সম্পর্কে Official Documentation দেখতে পারেন।
আপনি যদি twitter_api_v2
তে কন্ট্রিবিউট করতে চান, তাহলে অনুগ্রহ করে একটি ইস্যু তৈরি করুন অথবা পুল রিকোয়েস্ট তৈরি করুন।
OSS এ কন্ট্রিবিউট করার অনেক পদ্ধতি রয়েছে। উদাহরণস্বরূপ, নিম্নোল্লেখিত বিষয়গুলো বিবেচনা করা যেতে পারেঃ
- অনেক রিকোয়েস্ট প্যারামিটারস বা রেসপন্স ফিল্ডস রয়েছে যা এখনও ইমপ্লিমেন্ট করা হয়নি।
- ডকুমেন্টেশন পুরাতন বা অসম্পূর্ণই রয়ে গেছে।
- ফাংশনালিটি অর্জনের জন্য আরও উত্তম উপায় বা ধারণা দিয়ে সাহায্য করা।
- ইত্যাদি আরও অনেক ...
আপনি নিম্নোল্লেখিত পদ্ধতিগুলো থেকে আরও বিস্তারিত দেখতে পারেনঃ
অথবা আপনি চাইলে ডিসকাশন তৈরি করতে পারেন।
এই ডেভেলপমেন্টে নির্দ্বিধায় যোগ দিন, বিভিন্ন মতামত সফ্টওয়্যারকে আরও ভালভাবে উন্নত হতে সাহায্য করে!
আন্তরিক শুভেচ্ছা এবং অসংখ্য ধন্যবাদ সকল অপূর্ব কন্ট্রিবিউটরবৃন্দদের (emoji key):
এই প্রোজেক্টটি all-contributors স্পেসিফিকেশন অনুসরণ করে। যে কোন প্রকারের কন্ট্রিবিউশনকে স্বাগতম!
আমাদের আপনার সমর্থন দেখানোর সবচেয়ে সহজ পদ্ধতি হল প্রোজেক্টটিতে একটি স্টার দেওয়া GitHub এবং Pub.dev এ।
এছাড়াও আপনি GitHub এ একজন স্পন্সর হিসাবে প্রোজেক্টটিকে সাহায্য করতে পারেনঃ
এছাড়াও আপনি আপনার রিপোসিটোরিতে নিম্নোল্লেখিত যে কোন ব্যাজ প্রদর্শন করাতে পারেন যে আপনার অ্যাপটি twitter_api_v2
দ্বারা নির্মিতঃ
[![Powered by twitter_api_v2](https://img.shields.io/badge/Powered%20by-twitter_api_v2-00acee.svg)](https://github.com/twitter-dart/twitter-api-v2)
[![Powered by twitter_api_v2](https://img.shields.io/badge/Powered%20by-twitter_api_v2-00acee.svg?style=flat-square)](https://github.com/twitter-dart/twitter-api-v2)
[![Powered by twitter_api_v2](https://img.shields.io/badge/Powered%20by-twitter_api_v2-00acee.svg?style=for-the-badge)](https://github.com/twitter-dart/twitter-api-v2)
twitter_api_v2
এর সমস্ত সংস্থানসমূহ BSD-3
লাইসেন্সের অধীনে সরবরাহ করা আছে।
বিঃদ্রঃ
.github/header-checker-lint.yml
এর উপর ভিত্তি করে লাইসেন্স নোটিশের সূত্র কঠোরভাবে যাচাই করা আছে। অনুমোদিত মানদণ্ডের জন্য অনুগ্রহ করে header-checker-lint.yml যাচাই করুন।
twitter_api_v2
টি Kato Shinya (@myConsciousness) এর দ্বারা ডিজাইন এবং ইমপ্লিমেন্ট করা হয়েছে।