Вчера я познакомился с Twitter4j и сейчас тестирую функции моей будущей программы. Как следует из названия, я безуспешно пытаюсь загрузить изображение в твиттер. Вот мой код:

import static java.awt.Toolkit.getDefaultToolkit;
import static javax.swing.JOptionPane.ERROR_MESSAGE;
import static javax.swing.JOptionPane.showMessageDialog;

import java.awt.Image;
import java.io.File;

import javax.swing.Icon;
import javax.swing.ImageIcon;

import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.examples.tweets.UploadMultipleImages;
import twitter4j.media.ImageUpload;
import twitter4j.media.ImageUploadFactory;

public final class UpdateStatus {

static File file = new File("/images/Done.jpg");

public static void main(String[] args) {

    for(int i=0;i<2;i++){
        Twitter twitter = new TwitterFactory().getInstance();

        Status status=null;
        try {

            ImageUpload.upload(file,"22");

        } catch (TwitterException e) {
            System.err.println("Shit...");
            System.exit(3);
        }

    }

    System.out.println("Done");

}
}

Изображение, которое я пытаюсь загрузить, имеет формат Done.jpg и находится в папке в пакете. Я использовал этот метод для изображений в других программах, поэтому я почти уверен, что он работает. Тем не менее, это дает мне сообщение об ошибке перед запуском кода, в котором говорится: «Невозможно создать статическую ссылку на загрузку нестатического метода (файл, строка) из типа ImageUpload». Любые идеи, которые могли бы мне помочь? :D

0
GoJb 29 Янв 2015 в 18:45

2 ответа

Перед тестированием кода вам необходимо убедиться в следующем:

  1. Зарегистрируйте свое приложение на странице https://apps.twitter.com/ и получите токены Oauth для подключения. ваше приложение в Twitter и выполните желаемое действие. Вы получите ConsumerKey,consumerAccessToken, accessKey и accessToken.
  2. Если вы хотите публиковать обновления, убедитесь, что вы настроили разрешения своего приложения на доступ для чтения и записи, доступ по умолчанию — только для чтения.

После того, как у вас есть необходимые токены доступа, вам нужно создать экземпляр Twitter, используя эти токены. Затем этот экземпляр можно использовать для выполнения необходимых действий. См. пример кода ниже, чтобы загрузить изображение -

ConfigurationBuilder twitterConfigBuilder = new ConfigurationBuilder();
twitterConfigBuilder.setDebugEnabled(true);
twitterConfigBuilder.setOAuthConsumerKey("consumerkey");
twitterConfigBuilder.setOAuthConsumerSecret("consumersecret");
twitterConfigBuilder.setOAuthAccessToken("accesstoken");
twitterConfigBuilder.setOAuthAccessTokenSecret("accesstokensecret");

Twitter twitter = new TwitterFactory(twitterConfigBuilder.build()).getInstance();
String statusMessage = "Watch out this interesting offer I came across today";
File file = new File("/images/Done.jpg"); 

StatusUpdate status = new StatusUpdate(statusMessage);
status.setMedia(file); // set the image to be uploaded here.
twitter.updateStatus(status);

Надеюсь это поможет.

6
JoschJava 24 Май 2020 в 15:11
Большое спасибо за это! Я пробовал это пару раз, но все равно получаю одно и то же сообщение, не могу понять, почему... Я пытался настроить его, но безрезультатно. Сообщение об ошибке говорит, что изображение не может быть найдено. Черт возьми, я отстой.
 – 
GoJb
12 Фев 2015 в 19:39

ImageUpload.upload — это не статический метод, а метод экземпляра.

Вам нужно создать экземпляр ImageUpload и вызвать метод из экземпляра.

Судя по документации ImageUpload, это интерфейс. Поэтому вам нужно создать экземпляр класса, реализующего ImageUpload.

0
S.L. Barth 29 Янв 2015 в 18:49
Как бы это сделать? Я все еще довольно паршиво разбираюсь в Java, поэтому я не знаю всего: P
 – 
GoJb
29 Янв 2015 в 18:52
Я не знаком с Twitter4j, но когда вы просматриваете документацию, вы можете увидеть классы, которые реализуют ImageUpload. Похоже, что TwitterUpload myInstance = TwitterUpload(conf, oauth) поможет.
 – 
S.L. Barth
29 Янв 2015 в 18:55
Существует множество замечательных примеров использования Twitter4j, вам нужно просмотреть некоторые из этих первых twitter4j. .org/en/code-examples.html Тогда на этот вопрос уже был дан ответ здесь stackoverflow.com/questions/24692147/… Но я думаю, вам понадобится базовая Java концепции, или вы будете бороться!
 – 
Tony Kennah
31 Янв 2015 в 03:27