Giter Site home page Giter Site logo

Comments (15)

charlesr1971 avatar charlesr1971 commented on June 12, 2024 3

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.

ZainUrRehmanKhan avatar ZainUrRehmanKhan commented on June 12, 2024 2
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.

charlesr1971 avatar charlesr1971 commented on June 12, 2024 1

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.

charlesr1971 avatar charlesr1971 commented on June 12, 2024 1

God, this MarkDown Editor is terrible.
You would think GitHub could sort this out? 😩

from twitter-lite.

charlesr1971 avatar charlesr1971 commented on June 12, 2024 1

Yes. You need to use the twitter-lite version in my PR request above:

#187

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.

McCambley avatar McCambley commented on June 12, 2024 1

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.

charlesr1971 avatar charlesr1971 commented on June 12, 2024

Try adding:

subdomain: 'api'

To the arguments of:

new Twitter({
subdomain: 'api'
...
})

Argument object...

from twitter-lite.

ZainUrRehmanKhan avatar ZainUrRehmanKhan commented on June 12, 2024

Still same response.

from twitter-lite.

charlesr1971 avatar charlesr1971 commented on June 12, 2024

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.

charlesr1971 avatar charlesr1971 commented on June 12, 2024

Also:

#187

**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.

charlesr1971 avatar charlesr1971 commented on June 12, 2024

charlesr1971@d5e9ef1

from twitter-lite.

ZainUrRehmanKhan avatar ZainUrRehmanKhan commented on June 12, 2024

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.

ZainUrRehmanKhan avatar ZainUrRehmanKhan commented on June 12, 2024

why there is no content-type application/json?

from twitter-lite.

charlesr1971 avatar charlesr1971 commented on June 12, 2024

Here is the commit:

charlesr1971@d5e9ef1

from twitter-lite.

ZainUrRehmanKhan avatar ZainUrRehmanKhan commented on June 12, 2024

I tried using your repo for the package but It's also not working.

from twitter-lite.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.