JavaのVK notifer

かつて私は、顧客がソーシャルネットワークVkontakteを通じてのみフィードバックを維持しているプロジェクトに取り組む機会を得ました。 私はこのソーシャルネットワークの特にアクティブなユーザーではないため、送信されたメッセージの受信速度の点で問題がありました。 たまたま腰を引き、寝台で数日過ごしました。 仰向けになって横たわっている間は特別なことは何もないので、急いでいくつかの問題を解決することにしました。



猫の下で行われたjava治療の結果。



私はJavaでプログラミングしたことがないという事実から始めたいので、私のアプリケーションの天才であるふりをしません。

笑い、快適になり、充電を近づけた後、私はこの素晴らしい言語で最初のアプリケーションを開始しました。

私が最初にやることを決めたのは、通知者用のフレームを作成することでした。 必要なのは、メッセージをポップアップするシンプルなトレイメニューだけでした。



//   PopupMenu popup = new PopupMenu(); //   MenuItem exitItem = new MenuItem(""); //    exitItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); } }); //    popup.add(exitItem); SystemTray systemTray = SystemTray.getSystemTray(); Image image = Toolkit.getDefaultToolkit().getImage("vk_icon.png"); TrayIcon trayIcon = new TrayIcon(image,"VKNotifer",popup); trayIcon.setImageAutoSize(true); //    systemTray.add(trayIcon); //  trayIcon.displayMessage("VKNotifer", "",TrayIcon.MessageType.INFO);
      
      





現在の主なタスクは、現在のメッセージのリストを取得することです。 この目的のために、提供されたapk Vkontakteを使用しました。 apiの基本情報は、 こちらで確認できます

apiを使用できるようにするために最初に行うことは、Vkontakteアプリケーションを作成することです 。その後、トークンを受け取るために必要なアプリケーションのIDを受け取ります。

APIにアクセスする2番目のステップは、トークン自体を取得することです。 これを行うには、アプリケーションで次の手順を実行する必要があります。

  1. ログイン
  2. 要求された要件の確認
  3. トークンを直接取得する


その後、トークンのおかげで、APIメソッドを実行できます。 認証プロセスについては、 こちらをご覧ください。

これらの目的のために、VKapiクラスを作成しました。このクラスには、トークンの取得とメッセージのリストの取得という2つのメソッドがあります。

方法1-トークンの取得:

 HttpClient httpClient = new DefaultHttpClient(); //    HttpPost post = new HttpPost("http://oauth.vk.com/authorize?" + "client_id="+client_id+ "&scope="+scope+ "&redirect_uri="+redirect_uri+ "&display="+display+ "&response_type="+response_type); HttpResponse response; response = httpClient.execute(post); post.abort(); //  String HeaderLocation = response.getFirstHeader("location").getValue(); URI RedirectUri = new URI(HeaderLocation); //          //ip_h  to_h String ip_h= RedirectUri.getQuery().split("&")[2].split("=")[1]; String to_h=RedirectUri.getQuery().split("&")[4].split("=")[1]; //    post = new HttpPost("https://login.vk.com/?act=login&soft=1"+ "&q=1"+ "&ip_h="+ip_h+ "&from_host=oauth.vk.com"+ "&to="+to_h+ "&expire=0"+ "&email="+email+ "&pass="+pass); response = httpClient.execute(post); post.abort(); //       HeaderLocation = response.getFirstHeader("location").getValue(); post = new HttpPost(HeaderLocation); //    response = httpClient.execute(post); post.abort(); //       HeaderLocation = response.getFirstHeader("location").getValue(); //    post = new HttpPost(HeaderLocation); response = httpClient.execute(post); post.abort(); //       HeaderLocation = response.getFirstHeader("location").getValue(); //     access_token = HeaderLocation.split("#")[1].split("&")[0].split("=")[1];
      
      





メッセージAPIのリストを取得するには、Vkontakteにはmessages.getメソッドがあります

方法2-メッセージのリストを取得する:

 //   String url = "https://api.vk.com/method/"+ "messages.get"+ "?out=0"+ "&access_token="+access_token ; String line = ""; try { URL url2 = new URL(url); BufferedReader reader = new BufferedReader(new InputStreamReader(url2.openStream())); line = reader.readLine(); reader.close(); } catch (MalformedURLException e) { // ... } catch (IOException e) { // ... } return line;
      
      





クラス全体:

 public class VKapi { private String client_id = "2971510"; private String scope = "messages"; private String redirect_uri = "http://oauth.vk.com/blank.html"; private String display = "popup"; private String response_type = "token"; private String access_token; private String email = "******";//    email private String pass = "******";//     public void setConnection() throws IOException, URISyntaxException { //    token'a } public String getNewMessage() throws ClientProtocolException, IOException, NoSuchAlgorithmException, URISyntaxException { //      } }
      
      





あとは、クラスをインスタンス化し、トークンを取得し、無限ループでメッセージリストを受信するだけです。 新しく受信したリストが前のものと異なる場合、新しいメッセージの通知を表示します。

その結果、以下が得られます。

 public static void main(String[] args) throws IOException, URISyntaxException, AWTException, InterruptedException, NoSuchAlgorithmException { //   PopupMenu popup = new PopupMenu(); //   MenuItem exitItem = new MenuItem(""); //    exitItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { System.exit(0); } }); //    popup.add(exitItem); SystemTray systemTray = SystemTray.getSystemTray(); //  Image image = Toolkit.getDefaultToolkit().getImage("vk_icon.png"); TrayIcon trayIcon = new TrayIcon(image,"VKNotifer",popup); trayIcon.setImageAutoSize(true); //    systemTray.add(trayIcon); trayIcon.displayMessage("VKNotifer", "  ",TrayIcon.MessageType.INFO); //    VKapi vkAPI = new VKapi(); //  vkAPI.setConnection(); trayIcon.displayMessage("VKNotifer", " ",TrayIcon.MessageType.INFO); //  String oldMessage = vkAPI.getNewMessage(); String newMessage; int i = 0; for (;;){ //        3  Thread.sleep(3000); //    if (i == 15000){ //   45 000  (   ,     ) vkAPI.setConnection(); //   Thread.sleep(3000); //        i = 0; } //  newMessage = vkAPI.getNewMessage(); if (!newMessage.equals(oldMessage)) { oldMessage = newMessage; trayIcon.displayMessage("VKNotifer", "  ",TrayIcon.MessageType.INFO); Tools.playDrum(Drum.d53_Ride_Bell, 127,0); } i++; } }
      
      





ポップアップウィンドウに加えて、サウンドアラートも使用されます。

 Tools.playDrum(Drum.d53_Ride_Bell, 127,0);
      
      





これを行うには、 このトピックのライブラリを使用します



私はこれが理想的なパフォーマンスではないことを知っていますが、最も重要なことはそれが私の問題を完全に解決したことです。 ご清聴ありがとうございました。



All Articles