cernaehrungplugin.cpp cernaehrungplugin.h QNetworkAccessManager QNetworkRequest QNetworkReply QEventLoop QMessageBox QTextDocument tagVALUES struct tagVALUES typedef struct tagVALUES VALUES VALUES VALUES VALUES g_values[] [] g_values double double toValue (const QString &sz) toValue const QString & sz cErnaehrungPlugin::load #include"cernaehrungplugin.h" #include<QNetworkAccessManager> #include<QNetworkRequest> #include<QNetworkReply> #include<QEventLoop> #include<QMessageBox> #include<QTextDocument> typedefstructtagVALUES { QStringszSearch; cIngredient::iIngredientiIngredient; qrealdValue; }VALUES; VALUESg_values[]= { {"<td>Broteinheiten</td>",cIngredient::iIngredientBreadUnits,-1}, {"<td>Kilokalorien</td>",cIngredient::iIngredientCalories,-1}, {"<td>Eiweiß</td>",cIngredient::iIngredientProtein,-1}, {"<td>Fett</td>",cIngredient::iIngredientFat,-1}, {"<td>Kohlenhydrate</td>",cIngredient::iIngredientCarbohydrates,-1}, {"<td>Alkohol</td>",cIngredient::iIngredientAlcohol,-1}, {"<td>Wasser</td>",cIngredient::iIngredientWater,-1}, {"<td>Ballaststoffegesamt</td>",cIngredient::iIngredientTotalDietaryFibre,-1}, {"<td>Cholesterin</td>",cIngredient::iIngredientCholesterol,-1}, {"<td>Mineralstoffe</td>",cIngredient::iIngredientMineral,-1}, {"<td>VitaminARetinol</td>",cIngredient::iIngredientVitaminARetinol,-1}, {"<td>VitaminD</td>",cIngredient::iIngredientVitaminD,-1}, {"<td>VitaminEAktiv.</td>",cIngredient::iIngredientVitaminEactiv,-1}, {"<td>Folsäure</td>",cIngredient::iIngredientFolicacid,-1}, {"<td>VitaminB1</td>",cIngredient::iIngredientVitaminB1,-1}, {"<td>VitaminB2</td>",cIngredient::iIngredientVitaminB2,-1}, {"<td>VitaminB6</td>",cIngredient::iIngredientVitaminB6,-1}, {"<td>VitaminC</td>",cIngredient::iIngredientVitaminC,-1}, {"<td>a-Tocopherol</td>",cIngredient::iIngredientaTocopherol,-1}, {"<td>VitaminK</td>",cIngredient::iIngredientVitaminK,-1}, {"<td>Nicotinamid</td>",cIngredient::iIngredientNicotinamide,-1}, {"<td>Pantothensäure</td>",cIngredient::iIngredientPantothenicacid,-1}, {"<td>Biotin</td>",cIngredient::iIngredientBiotin,-1}, {"<td>VitaminB12</td>",cIngredient::iIngredientVitaminB12,-1}, {"<td>Retinoläquivalent</td>",cIngredient::iIngredientRetinolequivalent,-1}, {"<td>ß-Carotin</td>",cIngredient::iIngredientbCarotene,-1}, {"<td>Niacinäquivalent</td>",cIngredient::iIngredientNiacinequivalent,-1}, {"<td>freiesFolsäureäquivalent</td>",cIngredient::iIngredientfreefolicacidequivalent,-1}, {"<td>freieFolsäure</td>",cIngredient::iIngredientfreefolicacid,-1}, {"<td>Natrium</td>",cIngredient::iIngredientSodium,-1}, {"<td>Kalium</td>",cIngredient::iIngredientPotassium,-1}, {"<td>Magnesium</td>",cIngredient::iIngredientMagnesium,-1}, {"<td>Calcium</td>",cIngredient::iIngredientCalcium,-1}, {"<td>Eisen</td>",cIngredient::iIngredientIron,-1}, {"<td>Phosphor</td>",cIngredient::iIngredientPhosphorus,-1}, {"<td>Kupfer</td>",cIngredient::iIngredientCopper,-1}, {"<td>Zink</td>",cIngredient::iIngredientZinc,-1}, {"<td>Chlorid</td>",cIngredient::iIngredientChloride,-1}, {"<td>Fluorid</td>",cIngredient::iIngredientFluoride,-1}, {"<td>Jodid</td>",cIngredient::iIngredientIodide,-1}, {"<td>Selen</td>",cIngredient::iIngredientSelenium,-1}, {"<td>Mangan</td>",cIngredient::iIngredientManganese,-1}, {"<td>Schwefel</td>",cIngredient::iIngredientSulphur,-1}, {"<td>Arginin</td>",cIngredient::iIngredientArginine,-1}, {"<td>Cystin</td>",cIngredient::iIngredientCystine,-1}, {"<td>Histidin</td>",cIngredient::iIngredientHistidine,-1}, {"<td>Isoleucin</td>",cIngredient::iIngredientIsoleucine,-1}, {"<td>Leucin</td>",cIngredient::iIngredientLeucine,-1}, {"<td>Lysin</td>",cIngredient::iIngredientLysine,-1}, {"<td>Methionin</td>",cIngredient::iIngredientMethionine,-1}, {"<td>Phenylalanin</td>",cIngredient::iIngredientPhenylalanine,-1}, {"<td>Threonin</td>",cIngredient::iIngredientThreonine,-1}, {"<td>Tryptophan</td>",cIngredient::iIngredientTryptophane,-1}, {"<td>Tyrosin</td>",cIngredient::iIngredientTyrosine,-1}, {"<td>Valin</td>",cIngredient::iIngredientValine,-1}, {"<td>Alanin</td>",cIngredient::iIngredientAlanine,-1}, {"<td>Asparaginsäure</td>",cIngredient::iIngredientAsparticacid,-1}, {"<td>Glutaminsäure</td>",cIngredient::iIngredientGlutamicacid,-1}, {"<td>Glycin</td>",cIngredient::iIngredientGlycine,-1}, {"<td>Prolin</td>",cIngredient::iIngredientProline,-1}, {"<td>Serin</td>",cIngredient::iIngredientSerine,-1}, {"<td>sonst.essent.Aminosäuren</td>",cIngredient::iIngredientotheressent_aminoacids,-1}, {"<td>essent.Aminosäuren</td>",cIngredient::iIngredientessent_aminoacids,-1}, {"<td>sonst.n.essent.Aminosäuren</td>",cIngredient::iIngredientothernonessent_aminoacids,-1}, {"<td>n.essent.Aminosäuren</td>",cIngredient::iIngredientnonessent_aminoacids,-1}, {"<td>Ges.Fettsäuren</td>",cIngredient::iIngredientSaturatedfattyacids,-1}, {"<td>einfachunges.Fettsäuren</td>",cIngredient::iIngredientMonounsaturatedfattyacids,-1}, {"<td>mehrf.unges.Fettsäuren</td>",cIngredient::iIngredientPolyunsaturatedfattyacids,-1}, {"<td>Buttersäure</td>",cIngredient::iIngredientButyricacid,-1}, {"<td>Capronsäure</td>",cIngredient::iIngredientCaproicacid,-1}, {"<td>Caprylsäure</td>",cIngredient::iIngredientCaprylicacid,-1}, {"<td>Caprinsäure</td>",cIngredient::iIngredientCapricacid,-1}, {"<td>Laurinsäure</td>",cIngredient::iIngredientLauricacid,-1}, {"<td>Myristinsäure</td>",cIngredient::iIngredientMyristicacid,-1}, {"<td>C15:OFettsäure</td>",cIngredient::iIngredientC15_O_fattyacid,-1}, {"<td>Palmitinsäure</td>",cIngredient::iIngredientPalmiticacid,-1}, {"<td>Margarinsäure</td>",cIngredient::iIngredientMargaricacid,-1}, {"<td>Stearinsäure</td>",cIngredient::iIngredientStearicacid,-1}, {"<td>Arachinsäure</td>",cIngredient::iIngredientArachicacid,-1}, {"<td>Behensäure</td>",cIngredient::iIngredientBehenicacid,-1}, {"<td>Lignocerinsäure</td>",cIngredient::iIngredientLignocericacid,-1}, {"<td>Palmitoleinsäure</td>",cIngredient::iIngredientPalmitoleicacid,-1}, {"<td>Ölsäure</td>",cIngredient::iIngredientOleicacid,-1}, {"<td>Eicosensäure</td>",cIngredient::iIngredientEicosenicacid,-1}, {"<td>C22:1Fettsäure</td>",cIngredient::iIngredientC22_1_fattyacid,-1}, {"<td>C14:1Fettsäure</td>",cIngredient::iIngredientC14_1_fattyacid,-1}, {"<td>C24:1Fettsäure</td>",cIngredient::iIngredientC24_1_fattyacid,-1}, {"<td>Linolsäure</td>",cIngredient::iIngredientLinoleicacid,-1}, {"<td>Linolensäure</td>",cIngredient::iIngredientLinolenicacid,-1}, {"<td>Arachidonsäure</td>",cIngredient::iIngredientArachidonicacid,-1}, {"<td>C18:4Fettsäure</td>",cIngredient::iIngredientC18_4_fattyacid,-1}, {"<td>C20:5N-3Fettsäure</td>",cIngredient::iIngredientC20_5_N_3fattyacid,-1}, {"<td>C22:5N-3Fettsäure</td>",cIngredient::iIngredientC22_5_N_3fattyacid,-1}, {"<td>C22:6N-3Fettsäure</td>",cIngredient::iIngredientC22_6_N_3fattyacid,-1}, {"<td>C16:2Fettsäure</td>",cIngredient::iIngredientC16_2_fattyacid,-1}, {"<td>sonst.gesättigteFettsäuren</td>",cIngredient::iIngredientothersaturatedfattyacids,-1}, {"<td>sonst.einfachunges.Fettsäuren</td>",cIngredient::iIngredientothermonounsaturatedfattyacids,-1}, {"<td>Nonadecatriensäure</td>",cIngredient::iIngredientNonadecatrienicacid,-1}, {"<td>Eicosadiensäure</td>",cIngredient::iIngredientEicosadienicacid,-1}, {"<td>Eicosatriensäure</td>",cIngredient::iIngredientEicosatrienicacid,-1}, {"<td>Docosadiensäure</td>",cIngredient::iIngredientDocosadienicacid,-1}, {"<td>Docosatriensäure</td>",cIngredient::iIngredientDocosatrienicacid,-1}, {"<td>Docosatetraensäure</td>",cIngredient::iIngredientDocosatetraenicacid,-1}, {"<td>sonst.mehrfachunges.Fettsäuren</td>",cIngredient::iIngredientotherpolyunsat_fattyacids,-1}, {"<td>sonst.kurzkettigeFettsäuren</td>",cIngredient::iIngredientothershort_chainfattyacids,-1}, {"<td>kurzkettigeFettsäuren</td>",cIngredient::iIngredientshort_chainfattyacids,-1}, {"<td>sonst.mittelkettigeFettsäuren</td>",cIngredient::iIngredientothermedium_chainfattyacids,-1}, {"<td>mittelkettigeFettsäuren</td>",cIngredient::iIngredientmedium_chainfattyacids,-1}, {"<td>sonst.langkettigeFettsäuren</td>",cIngredient::iIngredientotherlong_chainfattyacids,-1}, {"<td>langkettigeFettsäuren</td>",cIngredient::iIngredientlong_chainfattyacids,-1}, {"<td>Glycerin+Lipoide</td>",cIngredient::iIngredientGlycerolandLipoides,-1}, {"<td>Sorbit</td>",cIngredient::iIngredientSorbitol,-1}, {"<td>Glucose</td>",cIngredient::iIngredientGlucose,-1}, {"<td>Fructose</td>",cIngredient::iIngredientFructose,-1}, {"<td>Saccharose</td>",cIngredient::iIngredientSucrose,-1}, {"<td>Lactose</td>",cIngredient::iIngredientLactose,-1}, {"<td>Stärke</td>",cIngredient::iIngredientStarch,-1}, {"<td>Maltose</td>",cIngredient::iIngredientMaltose,-1}, {"<td>Galactose</td>",cIngredient::iIngredientGalactose,-1}, {"<td>Glycogen</td>",cIngredient::iIngredientGlycogene,-1}, {"<td>Pentosan</td>",cIngredient::iIngredientPentosan,-1}, {"<td>Hexosan</td>",cIngredient::iIngredientHexosan,-1}, {"<td>Cellulose</td>",cIngredient::iIngredientCellulose,-1}, {"<td>Polyuronsäure</td>",cIngredient::iIngredientPolyuronicacid,-1}, {"<td>Mannit</td>",cIngredient::iIngredientMannitol,-1}, {"<td>Xylit</td>",cIngredient::iIngredientXylitol,-1}, {"<td>sonst.Zuckeralkohole</td>",cIngredient::iIngredientothersugaralcohols,-1}, {"<td>SummeZuckeralkohole</td>",cIngredient::iIngredientTotalsugaralcohols,-1}, {"<td>sonst.Monosaccharide</td>",cIngredient::iIngredientothermonosaccharides,-1}, {"<td>Monosaccharide</td>",cIngredient::iIngredientMonosaccharides,-1}, {"<td>sonst.Disaccharide</td>",cIngredient::iIngredientotherdisaccharides,-1}, {"<td>Disaccharide</td>",cIngredient::iIngredientDisaccharides,-1}, {"<td>Oligosaccharideresorb.</td>",cIngredient::iIngredientOligosaccharidesresorb,-1}, {"<td>Oligosacchariden.resorb.</td>",cIngredient::iIngredientOligosaccharidesnonresorb,-1}, {"<td>sonst.Polysaccharide</td>",cIngredient::iIngredientotherpolysaccharides,-1}, {"<td>Polysaccharide</td>",cIngredient::iIngredientPolysaccharides,-1}, {"<td>Ballaststoffewasserl.</td>",cIngredient::iIngredientDietaryfibrewatersoluble,-1}, {"<td>Ballaststoffew.unlösl.</td>",cIngredient::iIngredientDietaryfibrewaterinsoluble,-1}, {"<td>Lignin</td>",cIngredient::iIngredientLignin,-1}, {"<td>Purinbasen-Stickstoff</td>",cIngredient::iIngredientPurinebasesnitrogen,-1}, {"<td>Kochsalz</td>",cIngredient::iIngredientSodiumchloride,-1}, {"<td>Küchenabfälle</td>",cIngredient::iIngredientWaste,-1}, {"<td>sonst.Eiweißstoffe</td>",cIngredient::iIngredientotherproteins,-1}, {"<td>tierischesEiweiß</td>",cIngredient::iIngredientanimalprotein,-1}, {"<td>pflanzlichesEiweiß</td>",cIngredient::iIngredientplantprotein,-1}, {"<td>Harnsäure</td>",cIngredient::iIngredientUricacid,-1}, {"<td>sonst.organischenSäuren</td>",cIngredient::iIngredientotherorganicacids,-1}, {"<td>Mol-Diff.Kationen-Anionen</td>",cIngredient::iIngredientMol_diff_cations_anions,-1}, {"<td>Stickstoffaktor</td>",cIngredient::iIngredientNitrogenfactor,-1}, {"<td>Fettsäurenanteil</td>",cIngredient::iIngredientFattyacidpart,-1}, {"<td>Mineralstoffanteil</td>",cIngredient::iIngredientMineralspart,-1}, {"<td>P/SVerhältnis</td>",cIngredient::iIngredientPS_Ratio,-1}, {"<td>Biolog.Wertigkeit</td>",cIngredient::iIngredientBiologicalvalue,-1}, {"<td>fruktosefreieBroteinheiten</td>",cIngredient::iIngredientFructosefreebreadunits,-1}, {"<td>durchschn.Verzehr</td>",cIngredient::iIngredientaverageconsumption,-1}, }; QMap<QString,QString>cErnaehrungPlugin::detailsCapability() { QMap<QString,QString>map; map.insert("alle","egal"); map.insert("Bundeslebensmittelschlüssel","bls"); map.insert("Firmenprodukte","produkte"); return(map); } //http://www.ernaehrung.de/lebensmittel/suche/&nameInput=Milch&origin=egal&language=de //Origin:egal,bls(Bundeslebensmittelschlüssel),produkte(Firmenprodukte) QStringListcErnaehrungPlugin::search(constQString&szSearch,constQString&szDetails) { m_szUrls.clear(); m_szIngredients.clear(); QNetworkAccessManagernetworkManager; QUrlQuerypostData; postData.addQueryItem("nameInput",szSearch); if(szDetails.length()) postData.addQueryItem("origin",szDetails); else postData.addQueryItem("origin","egal"); postData.addQueryItem("language","de"); QNetworkRequestrequest(QUrl("http://www.ernaehrung.de/lebensmittel/suche/")); request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded"); QNetworkReply*reply=networkManager.post(request,postData.toString(QUrl::FullyEncoded).toUtf8()); QEventLooploop; QObject::connect(reply,SIGNAL(finished()),&loop,SLOT(quit())); loop.exec(); QByteArrayszData=reply->readAll(); deletereply; QList<QByteArray>szList=szData.split('\n'); for(intz=0;z<szList.count();z++) { QStringszLine=QString::fromUtf8(szList.at(z)); if(szLine.contains("<li><ahref=\"http://www.ernaehrung.de/lebensmittel")) { QStringszReply; QStringszURL; szURL=szLine.mid(szLine.indexOf("<li><a")+13); szURL=szURL.left(szURL.indexOf(">")-1); szReply=szLine.mid(szLine.indexOf("\">")+2); szReply=szReply.left(szReply.indexOf("<")); m_szIngredients.append(szReply); m_szUrls.append(szURL); } } return(m_szIngredients); } doubletoValue(constQString&sz) { QStringszTmp; szTmp=sz.mid(sz.indexOf("\">")+2); szTmp=szTmp.left(szTmp.indexOf("<")); szTmp.replace(",","."); return(szTmp.toDouble()); } boolcErnaehrungPlugin::load(qint16iIndex) { m_bLoaded=false; if(iIndex>m_szUrls.count()-1) return(false); QNetworkAccessManagernetworkManager; QNetworkRequestrequest(QUrl(m_szUrls.at(iIndex))); request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded"); QNetworkReply*reply=networkManager.get(request); QEventLooploop; QObject::connect(reply,SIGNAL(finished()),&loop,SLOT(quit())); loop.exec(); QByteArrayszData=reply->readAll(); deletereply; QList<QByteArray>szList; QStringszName; qrealdFactor; for(inti=0;i<(int)sizeof(g_values)/(int)sizeof(VALUES);i++) g_values[i].dValue=-1; if(szData.length()) { szList=szData.split('\n'); for(intz=0;z<szList.count();z++) { if(szList.at(z).contains("<divid=\"contentHeader\"><h1>")) { szName=szList.at(z).mid(szList.at(z).indexOf("<h1>")+4); szName=szName.left(szName.indexOf("</h1>")); } else { for(inti=0;i<(int)sizeof(g_values)/(int)sizeof(VALUES);i++) { QStringszL0=QString::fromUtf8(szList.at(z)); if(szL0.contains(QString::fromUtf8(g_values[i].szSearch.toLatin1().data()))) { dFactor=1; QStringszL1=QString::fromUtf8(szList.at(z+1)); QStringszL2=QString::fromUtf8(szList.at(z+2)); if(szL2.contains(">g<")) dFactor=1; elseif(szL2.contains(">mg<")) dFactor=1000; elseif(szL2.contains(QString::fromUtf8(">µg<"))) dFactor=1000000; g_values[i].dValue=toValue(szL1)/dFactor; } } } } } m_bLoaded=true; m_iLoadedIndex=iIndex; return(true); } qrealcErnaehrungPlugin::value(cIngredient::iIngredienti) { if(m_bLoaded) { for(intz=0;z<(int)sizeof(g_values)/(int)sizeof(VALUES);z++) { if(g_values[z].iIngredient==i) return(g_values[z].dValue); } } return(-1); } QStringcErnaehrungPlugin::ingredientName() { if(m_bLoaded) return(m_szIngredients.at(m_iLoadedIndex)); else return(QString("")); } boolcErnaehrungPlugin::config() { return(true); }