/** * djData follow me on Facebook! * ArtHackDay - Sight and Sound edition - PER CAPITA * a project by userZero & linse * 01/10/16 */ import oscP5.*; import netP5.*; OscP5 oscP5; NetAddress myRemoteLocation; String access_token ="EAACEdEose0cBAOZA2CnpqAZAZBI67DeSpKycTcFRIuhtr1LLOHzsoc41ZBn95rdcdZCCCsBGlWmbHZC0qER7qvkTkMlAeM2NNjhzhACwmriLkhE8EqSQ5U9AGq58eDomeQ0eHZCZBWtEzmiBnFE2xEugrtFPZA0bXJeRpIfhXaM0OWgZDZD"; int lastSecond = 0; int likes = 0; ArrayList<String> messageList; ArrayList<String> musicGenres; void setup() { oscP5 = new OscP5(this,4343); // connect to pd Patch myRemoteLocation = new NetAddress("127.0.0.1",4242); messageList = new ArrayList(); loadMusic("/home/mxd/arthackday/sounds"); } void draw() { if(second()%3 == 1 && lastSecond != second()){ pollFeed(); pollLikes(); } } void loadMusic(String _dir){ String[] _files = split(getFileNames(_dir), ' '); musicGenres = new ArrayList(); String[] _tmp; for(String _s : _files){ _tmp = split(_s, '.'); if(_tmp.length > 1){ if(_tmp[1].equals("wav")) musicGenres.add(_tmp[0]); } } println("////////////////////// MUSIC /////////////////////////"); println(musicGenres); println("//////////////////////////////////////////////////////"); } public String getFileNames(String _dir){ File userData = new File(_dir); File[] listOfFiles = userData.listFiles(); String _out = ""; for (int i = 0; i < listOfFiles.length; i++) { if (listOfFiles[i].isFile()) { _out += listOfFiles[i].getName()+" "; } else if (listOfFiles[i].isDirectory()) { } } return _out; } public void checkForMusic(String _message){ String _keyWords[] = _message.replaceAll("[^a-zA-Z0-9_]", "").toLowerCase().split("_");//.replaceAll(".","_") println("///////////////////////////////////////////////"); for(String _word : _keyWords){ println(_word); for(String _genre : musicGenres){ if(_word.equals(_genre)) play(_word); } } println("///////////////////////////////////////////////"); } void pollLikes(){ String response[] = loadStrings("https://graph.facebook.com/?fields=likes&id=http://www.facebook.com/djdaataa&access_token="+access_token); lastSecond = second(); if(response == null){ println("request FAIL"); return; } String str = ""; for(int i = 0; i < response.length;i++) str+=response[i]; JSONObject json = JSONObject.parse(str); like(json.getInt("likes")); } void pollFeed(){ String response[] = loadStrings(" https://graph.facebook.com/1272223639476617/feed?access_token="+access_token); lastSecond = second(); if(response == null){ println("request FAIL"); return; } println("GOT response"); String str = ""; for(int i = 0; i < response.length;i++) str+=response[i]; JSONObject json = JSONObject.parse(str); JSONArray data = json.getJSONArray("data"); ArrayList<String> _polledMessages = new ArrayList(); for(int i = 0; i < data.size(); i++){ if(!data.getJSONObject(i).isNull("message")){ JSONObject from = data.getJSONObject(i).getJSONObject("from"); String _mess = from.getString("name")+" says "+data.getJSONObject(i).getString("message"); _polledMessages.add(_mess.replaceAll(" ", "_")); } } receiveMessages(_polledMessages); } void receiveMessages(ArrayList<String> _polledMessages){ int _newCount = _polledMessages.size() - messageList.size(); if(_polledMessages.size() > 0 && messageList.size() > 0) if(!_polledMessages.get(0).equals(messageList.get(0))) _newCount = 1; if(_newCount != 0){ messageList = _polledMessages; String _mess = ""; for(int i = 0; i < _newCount; i++){ _mess += messageList.get(i)+" "; } post(_mess); } } public void play(String _genre){ print("PLAYING "); println(_genre); OscMessage mess = new OscMessage("/datadj/play"); mess.add(_genre+".wav"); oscP5.send(mess, myRemoteLocation); } void post(String _mess){ println("SENDING : "+ _mess); OscMessage mess = new OscMessage("/datadj/posts"); mess.add(_mess); oscP5.send(mess, myRemoteLocation); checkForMusic(_mess); } void like(int _cnt){ if(_cnt != likes) { likes = _cnt; println("LIKES : "+_cnt); OscMessage mess = new OscMessage("/datadj/likes"); mess.add(_cnt); oscP5.send(mess, myRemoteLocation); } } // set new token LIVE void oscEvent(OscMessage theOscMessage) { if(theOscMessage.checkAddrPattern("/token")==true) { access_token = theOscMessage.get(0).stringValue(); println("NEW TOKEN : "+access_token); } }