Skip to content
Advertisement

Incorrect twitter API credentials with Twitter4j

I am trying to create a simple twitter desktop app with Java and Twitter4j, however after clicking the send tweet button, I am greeted with an unable to authenticate message, I’m fairly certain my credentials are correct, so is there a possibility that the credentials are not being read correctly from the password fields? If so, how might I fix it?

package company.fourleafclover.TwitterClient;


import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Main {

    public static void main(String[] args) {
        System.out.println("Started!");


        final JFrame frame = new JFrame("Twitter Client");

        JLabel lblKey = new JLabel("API Key:");
        final JPasswordField pfKey = new JPasswordField(20);
        lblKey.setLabelFor(pfKey);

        JLabel lblSecret = new JLabel("API Secret:");
        final JPasswordField pfSecret = new JPasswordField(20);
        lblSecret.setLabelFor(pfSecret);

        JLabel lblToken = new JLabel("Access Token:");
        final JPasswordField pfToken = new JPasswordField(20);
        lblToken.setLabelFor(pfToken);

        JLabel lblASecret = new JLabel("Access Secret:");
        final JPasswordField pfASecret = new JPasswordField(20);
        lblASecret.setLabelFor(pfASecret);

        JLabel lblmsg = new JLabel("Message:");
        JTextField tfmsg = new JTextField(20);
        lblmsg.setLabelFor(tfmsg);

        JButton btnGet = new JButton("Send tweet");

        btnGet.addActionListener(
                new ActionListener() {

                    public void actionPerformed(ActionEvent e) {
                        String APIKey = new String(pfKey.getPassword());
                        String APISecret = new String(pfASecret.getPassword());
                        String AccessToken = new String(pfToken.getPassword());
                        String AccessSecret = new String(pfASecret.getPassword());
                        String Msg = new String(tfmsg.getText());


                        try {
                            Twitter twitter = new TwitterFactory().getInstance();

                            twitter.setOAuthConsumer(APIKey, APISecret);
                            AccessToken accessToken = new AccessToken(AccessToken,
                                    AccessSecret);

                            twitter.setOAuthAccessToken(accessToken);

                            twitter.updateStatus(Msg);

                            System.out.println("Successfully updated the status in Twitter.");
                        } catch (TwitterException te) {
                            te.printStackTrace();
                        }



                        JOptionPane.showMessageDialog(frame,
                                "Tweet sent!");
                    }
                });

        JButton btnLogin = new JButton("Login");

        JPanel panel = new JPanel();
        panel.setLayout(new SpringLayout());

        panel.add(lblKey);//API Key
        panel.add(pfKey);//Api Key
        panel.add(lblSecret);//Access Secret
        panel.add(pfSecret);
        panel.add(lblToken);//API Token
        panel.add(pfToken);//API Token
        panel.add(lblASecret);
        panel.add(pfASecret);
        panel.add(lblmsg);
        panel.add(tfmsg);
        panel.add(btnLogin);
        panel.add(btnGet);

        jtextfielddemo.SpringUtilities.makeCompactGrid(panel,
                6, 2, //rows, cols
                6, 6, //initX, initY
                6, 6); //xPad, yPad

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 200);
        frame.getContentPane().add(panel);
        frame.setVisible(true);









    }

}




Advertisement

Answer

Solved it, String APISecret = new String(pfASecret.getPassword()); should have been String APISecret = new String(pfSecret.getPassword()); it was putting the access token as the API token.

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement