Comments (15)
All I know is that the current Twitter-lite V2 /tweets
endpoint does NOT work.
My PR code updates, work with me.
I must say your content type error message, is a little strange.
from twitter-lite.
const client = new Twitter({
version: "2",
extension: false,
consumer_key: process.env.TWITTER_CONSUMER_KEY,
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
access_token_key: oauthToken,
access_token_secret: oauthSecret,
});
client.post('tweets', { text: 'hello world' }).then(tweet => {
// do something
console.log(tweet)
}).catch((e) => console.log(e));
Response:
{
_headers: Headers {
[Symbol(map)]: [Object: null prototype] {
date: [Array],
server: [Array],
'set-cookie': [Array],
'api-version': [Array],
'content-type': [Array],
'cache-control': [Array],
'content-length': [Array],
'x-frame-options': [Array],
'content-encoding': [Array],
'x-xss-protection': [Array],
'x-rate-limit-limit': [Array],
'x-rate-limit-reset': [Array],
'content-disposition': [Array],
'x-content-type-options': [Array],
'x-rate-limit-remaining': [Array],
'strict-transport-security': [Array],
'x-response-time': [Array],
'x-connection-hash': [Array],
connection: [Array]
}
},
errors: [
{
parameters: {},
message: 'Requests with bodies must have content-type of application/json.'
}
],
title: 'Invalid Request',
detail: 'One or more parameters to your request was invalid.',
type: 'https://api.twitter.com/2/problems/invalid-request'
}
any fix? @charlesr1971
from twitter-lite.
I have found the fix:
const JSON_ENDPOINTS = [
'direct_messages/events/new',
'direct_messages/welcome_messages/new',
'direct_messages/welcome_messages/rules/new',
'media/metadata/create',
'collections/entries/curate',
'tweets',
];
Oh. And I had to update my code as well:
Here is the code
async function createNewTwitterClient (subdomain, extension, response, twitterAppConfig, version) {
const twitter = require("twitter-lite");
return new twitter({
subdomain,
consumer_key: twitterAppConfig.consumerKey, // from Twitter.
consumer_secret: twitterAppConfig.consumerSecret,
extension, // true is the default (this must be set to false for v2 endpoints),
access_token_key: twitterAppConfig.accessTokenKey, // from your User (oauth_token)
access_token_secret: twitterAppConfig.accessTokenSecret, // from your User (oauth_token_secret)
bearer_token: response ? response?.access_token : null,
version
});
}
const twitterApiClient = await createNewTwitterClient('api', false, null, twitterAppConfig,'2');
twitterApiClient.post('tweets', { text: 'hello world' }).then(tweet => {
// do something
}).catch();
So, I removed the bearer token from the twitterAppConfig
Maybe, you should be allowed to send the bearer token, along with the access token, without losing the ability to POST. Currently, your code chooses which type of authentication to use, based on whether the bearer token is present. It might be better to choose which type of authentication to use, based on whether the bearer token is present and whether the access token is not present?
from twitter-lite.
God, this MarkDown Editor is terrible.
You would think GitHub could sort this out? 😩
from twitter-lite.
Yes. You need to use the twitter-lite version in my PR request above:
Unfortunately, the owners of the twitter-lite repo, are not merging PR requests at the moment.
But, you can clone my repository and use that:
https://github.com/charlesr1971/twitter-lite/tree/%40charlesr1971
from twitter-lite.
Chiming in here to say that I'm also receiving the same content-type error for the /tweets
endpoint.
try {
const client = new Twitter({
subdomain: "api", // With or without this parameter, the error persists
version: "2",
extension: false,
consumer_key,
consumer_secret,
access_token_key,
access_token_secret,
});
const tweet = await client.post("tweets", {
text: "Hello, World!",
});
res.send({ tweet });
} catch (error) {
res.send({ error });
}
Reponds with:
{
"error": {
"_headers": {},
"errors": [
{
"message": "Requests with bodies must have content-type of application/json."
}
],
"title": "Invalid Request",
"detail": "One or more parameters to your request was invalid.",
"type": "https://api.twitter.com/2/problems/invalid-request"
}
}
@charlesr1971 I will take a look at your PR!
from twitter-lite.
Try adding:
subdomain: 'api'
To the arguments of:
new Twitter({
subdomain: 'api'
...
})
Argument object...
from twitter-lite.
Still same response.
from twitter-lite.
Please try using this exact code:
`async function createNewTwitterClient (subdomain, extension, response, twitterAppConfig, version) {
const twitter = require("twitter-lite");
return new twitter({
subdomain,
consumer_key: twitterAppConfig.consumerKey,
consumer_secret: twitterAppConfig.consumerSecret,
extension,
access_token_key: twitterAppConfig.accessTokenKey,
access_token_secret: twitterAppConfig.accessTokenSecret,
bearer_token: response ? response?.access_token : null,
version
});
}
const apiClient = await createNewTwitterClient('api', false, null, twitterAppConfig,'2');
const apiResponse = await apiClient.getBearerToken();
const twitterApiClient = await createNewTwitterClient('api', false, apiResponse, twitterAppConfig,'2');
twitterApiClient.post('tweets', { text: 'hello world' }).then(tweet => {
}).catch();`
This works for me!
My twitterAppConfig is:
const twitterAppConfig = { consumerKey: APP_CONFIG.CONSUMER_KEY1, consumerSecret: APP_CONFIG.CONSUMER_SECRET1, accessTokenKey: APP_CONFIG.ACCESS_TOKEN1, accessTokenSecret: APP_CONFIG.ACCESS_TOKEN_SECRET1 };
from twitter-lite.
Also:
**This PR has not been merged yet. **
I had to change the code inside the Twitter-Lite for /tweets
v2 to work!
from twitter-lite.
from twitter-lite.
I'm still facing the same issue, I tried the exact same code you mentioned above.
Is there any workaround or other package which I can use for now?
from twitter-lite.
why there is no content-type application/json?
from twitter-lite.
Here is the commit:
from twitter-lite.
I tried using your repo for the package but It's also not working.
from twitter-lite.
Related Issues (20)
- URL Card Doesn't Appear
- API v2 documentation
- Rate limit handling could be more explicit
- Cannot like a tweet with v2 HOT 3
- TypeScript does not like `new Twitter({ bearer_token })` HOT 1
- How do i tweet to someone who just followed me?
- twitter-lite client stream method always defaults to api version 1.1 HOT 3
- POST to the Cards endpoint fails HOT 1
- Two ways to access data? HOT 1
- Only allow code to post tweets from the account defined in the "follow" parameter.
- Stops Posting Tweets After a Certain Time HOT 1
- How to post link text / images HOT 3
- Media from Tweet lookup
- Twitter Bookmarks API Endpoint HOT 1
- Tweet on behalf of other users?
- Does `twitter-lite` report the current status of rate limits, in order to get the count of the API requests remaining in the current time-window? HOT 1
- Upcoming API changes
- ReferenceError: Property 'Buffer' doesn't exist
- Could not authenticate you
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from twitter-lite.