From 227742748d54c3870728c3a09ea3db66bc6a0dab Mon Sep 17 00:00:00 2001 From: keita Date: Thu, 1 Apr 2021 21:50:28 +0900 Subject: [PATCH 1/6] =?UTF-8?q?direct=5Fmaggages/event/new=E3=82=92?= =?UTF-8?q?=E3=81=9F=E3=81=9F=E3=81=8F=E3=82=84=E3=81=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cocoatweet/api/directMessage/new.cc | 31 ++++++++++++++++++++++++ src/cocoatweet/api/directMessage/new.h | 32 +++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/cocoatweet/api/directMessage/new.cc create mode 100644 src/cocoatweet/api/directMessage/new.h diff --git a/src/cocoatweet/api/directMessage/new.cc b/src/cocoatweet/api/directMessage/new.cc new file mode 100644 index 0000000..34220e6 --- /dev/null +++ b/src/cocoatweet/api/directMessage/new.cc @@ -0,0 +1,31 @@ +#include +#include +#include + +namespace CocoaTweet::API::DirectMessages{ + New::New(){ + url_ = "https://api.twitter.com/1.1/direct_messages/events/new.json"; + contentType_ = "application/json"; + + nlohmann::json tmp; + tmp["type"] = "message_create"; + tmp["message_create"] = nlohmann::json::object(); + tmp["message_create"]["target"] = nlohmann::json::object(); + tmp["message_create"]["message_data"] = nlohmann::json::object(); + json_["event"] = tmp; + } + + + void New::recipient(const std::string& _id){ + json_["event"]["message_create"]["target"]["recipient_id"] = std::stol(_id); + } + + void New::message(const std::string& _message){ + json_["event"]["message_create"]["message_data"]["text"] = _message; + } + + void New::process(std::weak_ptr _oauth){ + bodyParam_.insert_or_assign("data", json_.dump()); + HttpPost::process(_oauth, [](const std::string& _rcv){}); + } +} \ No newline at end of file diff --git a/src/cocoatweet/api/directMessage/new.h b/src/cocoatweet/api/directMessage/new.h new file mode 100644 index 0000000..2cb3647 --- /dev/null +++ b/src/cocoatweet/api/directMessage/new.h @@ -0,0 +1,32 @@ +#ifndef COCOATWEET_API_DIRECTMESSAGE_NEW_H_ +#define COCOATWEET_API_DIRECTMESSAGE_NEW_H_ + +#include +#include +#include +#include +#include +#include "nlohmann/json.hpp" + +namespace CocoaTweet::API::DirectMessages { +/// @brief class for using statuses/update endpoint +class New : public CocoaTweet::API::Interface::HttpPost { +public: + New(); + void recipient(const std::string& _id); + void message(const std::string& _message); + + + + /// @brief process request for endpoint + /// @param[in] std::weak_ptr _oauth : pointer to oauth object + /// @param[out] CocoaTweet::API::Model::Tweet : request result + void process(std::weak_ptr _oauth); + +private: + std::string status_; + nlohmann::json json_; +}; +} // namespace CocoaTweet::API::Statuses + +#endif From b9d40e25c331a2cd317ac6555826b4d3ec646153 Mon Sep 17 00:00:00 2001 From: keita Date: Thu, 1 Apr 2021 21:51:20 +0900 Subject: [PATCH 2/6] =?UTF-8?q?dm=E3=82=92=E9=80=81=E4=BF=A1=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=81=9F=E3=82=81=E3=81=AB=E3=81=AFapplication/json?= =?UTF-8?q?=E3=82=92post=E3=81=97=E3=81=AA=E3=81=84=E3=81=A8=E3=81=84?= =?UTF-8?q?=E3=81=91=E3=81=AA=E3=81=84=E3=81=9F=E3=82=81http/post=E3=81=AE?= =?UTF-8?q?interface=E3=81=AB=E3=81=A6=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cocoatweet/api/interface/httpPost.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cocoatweet/api/interface/httpPost.cc b/src/cocoatweet/api/interface/httpPost.cc index 378c280..e9313a7 100644 --- a/src/cocoatweet/api/interface/httpPost.cc +++ b/src/cocoatweet/api/interface/httpPost.cc @@ -53,6 +53,8 @@ void HttpPost::process(std::weak_ptr _oauth, ("Content-Disposition: form-data; name=\"" + key + "\";\r\n\r\n" + value + "\r\n"); } requestBody += (std::string("--") + "milkcocoa0902" + "--" + "\r\n"); + }else if(contentType_ == "application/json"){ + requestBody = bodyParam_["data"]; } } @@ -95,6 +97,8 @@ void HttpPost::process(std::weak_ptr _oauth, contentType = contentType_; } else if (contentType_ == "multipart/form-data") { contentType = contentType_ + "; boundary=milkcocoa0902"; + }else if(contentType_ == "application/json"){ + contentType_ = "application/json"; } headers = curl_slist_append(headers, ("Content-Type: " + contentType).c_str()); From 1482347c485ffcc02bbf82d6d399966d270b8a7d Mon Sep 17 00:00:00 2001 From: keita Date: Thu, 1 Apr 2021 21:51:45 +0900 Subject: [PATCH 3/6] =?UTF-8?q?dm=E7=94=A8=E3=81=AE=E3=82=A8=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=83=AA=E3=83=BC=E3=83=9D=E3=82=A4=E3=83=B3=E3=83=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/directMessage/directMessage.cc | 15 +++++++++++ .../api/directMessage/directMessage.h | 26 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/cocoatweet/api/directMessage/directMessage.cc create mode 100644 src/cocoatweet/api/directMessage/directMessage.h diff --git a/src/cocoatweet/api/directMessage/directMessage.cc b/src/cocoatweet/api/directMessage/directMessage.cc new file mode 100644 index 0000000..ee94d67 --- /dev/null +++ b/src/cocoatweet/api/directMessage/directMessage.cc @@ -0,0 +1,15 @@ +#include +#include + +namespace CocoaTweet::API::DirectMessages{ + DirectMessage::DirectMessage(std::shared_ptr _oauth){ + oauth_ = _oauth; + } + + void DirectMessage::messageCreate(const std::string& _recipient, const std::string& _message){ + CocoaTweet::API::DirectMessages::New dm; + dm.recipient(_recipient); + dm.message(_message); + dm.process(oauth_); + } +} \ No newline at end of file diff --git a/src/cocoatweet/api/directMessage/directMessage.h b/src/cocoatweet/api/directMessage/directMessage.h new file mode 100644 index 0000000..adbdefe --- /dev/null +++ b/src/cocoatweet/api/directMessage/directMessage.h @@ -0,0 +1,26 @@ +#ifndef COCOATWEET_API_DIRECTMESSAGE_DIRECTMESSAGE_H_ +#define COCOATWEET_API_DIRECTMESSAGE_DIRECTMESSAGE_H_ + +#include "cocoatweet/api/interface/groupInterface.h" +#include "cocoatweet/oauth/oauth.h" +#include +#include +#include + +namespace CocoaTweet::API::DirectMessages { + +/// @brief Entory point for statuses/* +class DirectMessage : public groupInterface { +public: + DirectMessage() = default; + + /// @brief constructor which finally should to be called. + /// @param[in] std::shared_ptr : pointer to OAuth object + DirectMessage(std::shared_ptr _oauth); + + void messageCreate(const std::string& _recipient, const std::string& _message); +private: +}; +} // namespace CocoaTweet::API::Statuses + +#endif From ea68ad22c12f43133e559d5bff21ce3072035609 Mon Sep 17 00:00:00 2001 From: keita Date: Thu, 1 Apr 2021 21:52:09 +0900 Subject: [PATCH 4/6] =?UTF-8?q?API=E3=81=AE=E3=82=A8=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=83=AA=E3=83=BC=E3=83=9D=E3=82=A4=E3=83=B3=E3=83=88=E3=81=AB?= =?UTF-8?q?dm=E3=82=92=E8=BC=89=E3=81=9B=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/cocoatweet/api/api.cc | 5 +++++ src/cocoatweet/api/api.h | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/cocoatweet/api/api.cc b/src/cocoatweet/api/api.cc index 6d5abd7..5249a36 100644 --- a/src/cocoatweet/api/api.cc +++ b/src/cocoatweet/api/api.cc @@ -6,6 +6,7 @@ API::API(CocoaTweet::OAuth::Key _key) { status_ = Statuses::Status(oauth_); favorite_ = Favorites::Favorite(oauth_); media_ = Medias::Media(oauth_); + directMessage_ = DirectMessages::DirectMessage(oauth_); } Statuses::Status API::status() const { @@ -19,4 +20,8 @@ Favorites::Favorite API::favorite() const { Medias::Media API::media() const { return media_; } + +DirectMessages::DirectMessage API::directMessage() const{ + return directMessage_; +} } // namespace CocoaTweet::API diff --git a/src/cocoatweet/api/api.h b/src/cocoatweet/api/api.h index 21ba046..0366517 100644 --- a/src/cocoatweet/api/api.h +++ b/src/cocoatweet/api/api.h @@ -4,6 +4,7 @@ #include #include #include +#include #include namespace CocoaTweet::API { @@ -24,10 +25,13 @@ public: Medias::Media media() const; + DirectMessages::DirectMessage directMessage() const; + private: Statuses::Status status_; Favorites::Favorite favorite_; Medias::Media media_; + DirectMessages::DirectMessage directMessage_; std::shared_ptr oauth_; }; } // namespace CocoaTweet::API From 1e31c756ce056e8232ed737c158e2fac64f7f922 Mon Sep 17 00:00:00 2001 From: keita Date: Thu, 1 Apr 2021 21:56:11 +0900 Subject: [PATCH 5/6] manage README --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index f22ab7e..8340588 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ you can use these endpoint - favorites/create - favorites/destroy - media/upload(support: jpg, jpeg, png, gif, mp4) +- direct_messages/events/new (message_create) # Dependency - libcurl(openssl version) @@ -142,6 +143,10 @@ api.favorite().Destroy("tweet id"); // get a timeline with screen name auto timeline = api.status().UserTimeline("milkcocoa0902"); +// send a direct message +// you cau get recipient_id using https://idtwi.com/ +api.directMessage().messageCreate("", "Sent message using Cocoa Twitter Library"); + ``` # More Information From f97deb5c36aef450851c3d4136e1a7f055de3a07 Mon Sep 17 00:00:00 2001 From: keita Date: Thu, 1 Apr 2021 21:56:56 +0900 Subject: [PATCH 6/6] format --- src/cocoatweet/api/api.cc | 10 ++--- .../api/directMessage/directMessage.cc | 24 +++++----- .../api/directMessage/directMessage.h | 5 ++- src/cocoatweet/api/directMessage/new.cc | 45 +++++++++---------- src/cocoatweet/api/directMessage/new.h | 4 +- src/cocoatweet/api/interface/httpPost.cc | 4 +- 6 files changed, 45 insertions(+), 47 deletions(-) diff --git a/src/cocoatweet/api/api.cc b/src/cocoatweet/api/api.cc index 5249a36..af529c1 100644 --- a/src/cocoatweet/api/api.cc +++ b/src/cocoatweet/api/api.cc @@ -2,10 +2,10 @@ namespace CocoaTweet::API { API::API(CocoaTweet::OAuth::Key _key) { - oauth_ = std::make_shared(_key); - status_ = Statuses::Status(oauth_); - favorite_ = Favorites::Favorite(oauth_); - media_ = Medias::Media(oauth_); + oauth_ = std::make_shared(_key); + status_ = Statuses::Status(oauth_); + favorite_ = Favorites::Favorite(oauth_); + media_ = Medias::Media(oauth_); directMessage_ = DirectMessages::DirectMessage(oauth_); } @@ -21,7 +21,7 @@ Medias::Media API::media() const { return media_; } -DirectMessages::DirectMessage API::directMessage() const{ +DirectMessages::DirectMessage API::directMessage() const { return directMessage_; } } // namespace CocoaTweet::API diff --git a/src/cocoatweet/api/directMessage/directMessage.cc b/src/cocoatweet/api/directMessage/directMessage.cc index ee94d67..4788418 100644 --- a/src/cocoatweet/api/directMessage/directMessage.cc +++ b/src/cocoatweet/api/directMessage/directMessage.cc @@ -1,15 +1,15 @@ #include #include -namespace CocoaTweet::API::DirectMessages{ - DirectMessage::DirectMessage(std::shared_ptr _oauth){ - oauth_ = _oauth; - } - - void DirectMessage::messageCreate(const std::string& _recipient, const std::string& _message){ - CocoaTweet::API::DirectMessages::New dm; - dm.recipient(_recipient); - dm.message(_message); - dm.process(oauth_); - } -} \ No newline at end of file +namespace CocoaTweet::API::DirectMessages { +DirectMessage::DirectMessage(std::shared_ptr _oauth) { + oauth_ = _oauth; +} + +void DirectMessage::messageCreate(const std::string& _recipient, const std::string& _message) { + CocoaTweet::API::DirectMessages::New dm; + dm.recipient(_recipient); + dm.message(_message); + dm.process(oauth_); +} +} // namespace CocoaTweet::API::DirectMessages \ No newline at end of file diff --git a/src/cocoatweet/api/directMessage/directMessage.h b/src/cocoatweet/api/directMessage/directMessage.h index adbdefe..d796111 100644 --- a/src/cocoatweet/api/directMessage/directMessage.h +++ b/src/cocoatweet/api/directMessage/directMessage.h @@ -17,10 +17,11 @@ public: /// @brief constructor which finally should to be called. /// @param[in] std::shared_ptr : pointer to OAuth object DirectMessage(std::shared_ptr _oauth); - + void messageCreate(const std::string& _recipient, const std::string& _message); + private: }; -} // namespace CocoaTweet::API::Statuses +} // namespace CocoaTweet::API::DirectMessages #endif diff --git a/src/cocoatweet/api/directMessage/new.cc b/src/cocoatweet/api/directMessage/new.cc index 34220e6..7cbbbec 100644 --- a/src/cocoatweet/api/directMessage/new.cc +++ b/src/cocoatweet/api/directMessage/new.cc @@ -2,30 +2,29 @@ #include #include -namespace CocoaTweet::API::DirectMessages{ - New::New(){ - url_ = "https://api.twitter.com/1.1/direct_messages/events/new.json"; - contentType_ = "application/json"; +namespace CocoaTweet::API::DirectMessages { +New::New() { + url_ = "https://api.twitter.com/1.1/direct_messages/events/new.json"; + contentType_ = "application/json"; - nlohmann::json tmp; - tmp["type"] = "message_create"; - tmp["message_create"] = nlohmann::json::object(); - tmp["message_create"]["target"] = nlohmann::json::object(); - tmp["message_create"]["message_data"] = nlohmann::json::object(); - json_["event"] = tmp; - } + nlohmann::json tmp; + tmp["type"] = "message_create"; + tmp["message_create"] = nlohmann::json::object(); + tmp["message_create"]["target"] = nlohmann::json::object(); + tmp["message_create"]["message_data"] = nlohmann::json::object(); + json_["event"] = tmp; +} +void New::recipient(const std::string& _id) { + json_["event"]["message_create"]["target"]["recipient_id"] = std::stol(_id); +} - void New::recipient(const std::string& _id){ - json_["event"]["message_create"]["target"]["recipient_id"] = std::stol(_id); - } +void New::message(const std::string& _message) { + json_["event"]["message_create"]["message_data"]["text"] = _message; +} - void New::message(const std::string& _message){ - json_["event"]["message_create"]["message_data"]["text"] = _message; - } - - void New::process(std::weak_ptr _oauth){ - bodyParam_.insert_or_assign("data", json_.dump()); - HttpPost::process(_oauth, [](const std::string& _rcv){}); - } -} \ No newline at end of file +void New::process(std::weak_ptr _oauth) { + bodyParam_.insert_or_assign("data", json_.dump()); + HttpPost::process(_oauth, [](const std::string& _rcv) {}); +} +} // namespace CocoaTweet::API::DirectMessages \ No newline at end of file diff --git a/src/cocoatweet/api/directMessage/new.h b/src/cocoatweet/api/directMessage/new.h index 2cb3647..e717e9a 100644 --- a/src/cocoatweet/api/directMessage/new.h +++ b/src/cocoatweet/api/directMessage/new.h @@ -16,8 +16,6 @@ public: void recipient(const std::string& _id); void message(const std::string& _message); - - /// @brief process request for endpoint /// @param[in] std::weak_ptr _oauth : pointer to oauth object /// @param[out] CocoaTweet::API::Model::Tweet : request result @@ -27,6 +25,6 @@ private: std::string status_; nlohmann::json json_; }; -} // namespace CocoaTweet::API::Statuses +} // namespace CocoaTweet::API::DirectMessages #endif diff --git a/src/cocoatweet/api/interface/httpPost.cc b/src/cocoatweet/api/interface/httpPost.cc index e9313a7..1d42587 100644 --- a/src/cocoatweet/api/interface/httpPost.cc +++ b/src/cocoatweet/api/interface/httpPost.cc @@ -53,7 +53,7 @@ void HttpPost::process(std::weak_ptr _oauth, ("Content-Disposition: form-data; name=\"" + key + "\";\r\n\r\n" + value + "\r\n"); } requestBody += (std::string("--") + "milkcocoa0902" + "--" + "\r\n"); - }else if(contentType_ == "application/json"){ + } else if (contentType_ == "application/json") { requestBody = bodyParam_["data"]; } } @@ -97,7 +97,7 @@ void HttpPost::process(std::weak_ptr _oauth, contentType = contentType_; } else if (contentType_ == "multipart/form-data") { contentType = contentType_ + "; boundary=milkcocoa0902"; - }else if(contentType_ == "application/json"){ + } else if (contentType_ == "application/json") { contentType_ = "application/json"; }